2012-12-18 1 views
36

Ho un controller che passa una matrice a un modello di ramoscello, che voglio usare in uno script scritto su quella pagina. Come potrei fare per farlo?Usa Javascript per accedere a una variabile passata attraverso Twig

Ho provato questo nel mio modello .twig:

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

ma che funziona solo se si tratta di una stringa.

+1

Aggiunta l'uscita di corrente e l'uscita prevista per la tua domanda può fare trovare una soluzione al vostro problema molto più facile. – Supericy

risposta

125

Potrebbe essere necessario json_encode l'array, provate questo:

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

Questo ha risolto il mio problema, grazie! – ChaoticLoki

+3

Qualche suggerimento su come fare lo stesso con una serie di oggetti? – belens

+2

Non dimenticare di aggiungere le virgolette 'var test = '{{testArray | json_encode | raw}}';' –

7

In primo luogo, inviare il JSON dati codificati dal regolatore e

poi in javascript,

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

che era quella per me :) – Eagle1

+0

Questo codice non è sicuro (XSS) –

+1

@ JoséGabrielGonzález Come lo faresti? – Kangouroops

0

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)); 

E nel mio 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>