web-dev-qa-db-fra.com

Utiliser Javascript pour accéder à une variable transmise par Twig

J'ai un contrôleur qui passe un tableau à un modèle de brindille que je veux utiliser dans un script écrit sur cette page. Comment pourrais-je m'y prendre?

J'ai essayé ceci dans mon template .twig:

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

mais cela ne fonctionne que si c'est une chaîne.

45
ChaoticLoki

Vous devrez peut-être json_encode le tableau, essayez ceci:

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

Commencez par envoyer les données JSON encodées à partir du contrôleur et

puis en javascript,

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

Je le fais de cette façon:

Retour du contrôleur test.data puis

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

Brindille:

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

Js: 

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

Sortie:

 ["one", "two"]

documentation ici

1
shades3002

Dans mon contrôleur, j'installe 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));

Et dans mon fichier brindille 

<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>
0
Mourad MAMASSI