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.
Vous devrez peut-être json_encode
le tableau, essayez ceci:
<script>
$(document).ready(function(){
var test = {{ testArray|json_encode|raw }};
});
</script>
Commencez par envoyer les données JSON encodées à partir du contrôleur et
puis en javascript,
var context= JSON.parse('{{ YourArrayFromController|raw}}');
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"]
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>