Ich habe einen Controller, der ein Array an eine Zweigvorlage übergibt, die ich in einem auf dieser Seite geschriebenen Skript verwenden möchte. Wie würde ich das machen?
Ich habe dies in meiner .twig-Vorlage versucht:
<script>
$(document).ready(function(){
var test = {{ testArray }};
});
</script>
aber das funktioniert nur, wenn es eine Zeichenfolge ist.
Möglicherweise müssen Sie das Array json_encode
, versuchen Sie Folgendes:
<script>
$(document).ready(function(){
var test = {{ testArray|json_encode|raw }};
});
</script>
Senden Sie zuerst die vom Controller und verschlüsselten Daten json
dann in javascript,
var context= JSON.parse('{{ YourArrayFromController|raw}}');
Ich mache es so:
Rückgabe des Controllers test.data dann
$test = array('data' => array('one','two'))
Zweig:
<div id="test" data-is-test="{{ test.data|json_encode }}"></div>
Js:
$(document).ready(function() {
var test = $('#test').data("isTest");
console.log(test);
});
Ausgabe:
["one", "two"]
In meinem Controller installiere ich 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));
Und in meinem Aktenzweig
<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>