Use Javascript to access a variable passed through Twig

69,109

Solution 1

You might have to json_encode the array, try this:

<script>
    $(document).ready(function(){
        var test = {{ testArray|json_encode|raw }};
    });
</script>

Solution 2

First, send the data json encoded from controller and

then in javascript,

var context= JSON.parse('{{ YourArrayFromController|raw}}');

Solution 3

I do it this way:

Return of the controller test.data then

$test = array('data' => array('one','two'))

Twig:

<div id="test" data-is-test="{{ test.data|json_encode }}"></div>

Js:

$(document).ready(function() {
    var test = $('#test').data("isTest");
    console.log(test);
});

Output:

 ["one", "two"]

documentation here

Solution 4

In My Controller I Install SerializerBundle

$serializer = $this->get('serializer');
        $countries = $this->getDoctrine()->getRepository("QSCORBundle:CountryMaps")->findAll();
        $jsonCountries = $serializer->serialize($countries, 'json');
 return $this->render('QSCORBundle:Default:index.html.twig',array("countries"=> $jsonCountries));

And In My File Twig

<script type="text/javascript" >
 var obj = {{ countries|json_encode|raw }};
 var myObject = eval('(' + obj + ')');

 console.log(myObject[0]['capital_latitude'] + " " + myObject[0]['capital_longitude']);//for the First Element
</script>
Share:
69,109
clifford.duke
Author by

clifford.duke

Updated on February 08, 2022

Comments

  • clifford.duke
    clifford.duke over 2 years

    I have a controller that passes an array to a twig template, which I want to use in a script written on that page. How would I go about doing that?

    I've tried this in my .twig template:

    <script>
        $(document).ready(function(){
            var test = {{ testArray }};
    });
    </script>
    

    but that only works if it's a string.

  • belens
    belens over 10 years
    Any suggestions how to do the same with a array of objects?
  • valerij vasilcenko
    valerij vasilcenko over 9 years
    Don't forget to add quotes var test = '{{ testArray|json_encode|raw }}';
  • Yep_It's_Me
    Yep_It's_Me about 9 years
    No, you don't want to quote it. That will make the variable a string containing a json value. Without the quotes it is parsed correctly as an array object.
  • Amaury Hanser
    Amaury Hanser almost 7 years
    @JoséGabrielGonzález How would you do it ?
  • some_groceries
    some_groceries almost 7 years
    i had problems with this, the keys orders were reversed while using alongside with leaflet library
  • Klesun
    Klesun about 4 years
    Um, what if some of values in your JSON has single quote? Like in {"message": "Can't process"}
  • Sébastien
    Sébastien over 2 years
    You should pass the JSON_HEX_TAG flag to json_encode: json_encode(constant('JSON_HEX_TAG')). Otherwise, you can get broken HTML (try "<!--<script>").