it-swarm.com.de

Verwenden Sie Javascript, um auf eine durch Twig übergebene Variable zuzugreifen

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.

45
ChaoticLoki

Möglicherweise müssen Sie das Array json_encode, versuchen Sie Folgendes:

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

Senden Sie zuerst die vom Controller und verschlüsselten Daten json

dann in javascript,

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

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"]

Dokumentation hier

1
shades3002

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