2013-10-03 23 views
8

Come posso passare {{app.user}} in Javascript?variabile Twig in Javascript

per ora faccio un blocco come;

<script type="text/javascript"> 
    var app_name = '{{ app_name }}'; 
    var app_url= '{{ app_url }}'; 
    var app_description= '{{ app_description }}'; 
    var app_email= '{{ app_email }}'; 
    var app_title= '{{ app_title }}'; 
    var app_dominio= '{{ app_dominio }}'; 
    var env = '{{ app.environment }}'; 
</script> 

in cui si trovano in config.yml questi parametri

risposta

14

non capisco che cosa è esattamente il tuo problema con la soluzione hai scelto, dovrebbe funzionare bene con {{}} app.user eccetto che app .user è un oggetto, quindi si dovrebbe avere una funzione toArray nel vostro utente e chiamare:

app_user = {{ app.user.toArray|json_encode() }}; 

Oppure chiamare ogni parametro dell'utente come {{}} app.user.id

See: http://twig.sensiolabs.org/doc/filters/json_encode.html

Btw si dovrebbe usare json_encode per le variabili sopra, se si dispone di un preventivo in una stringa si romperà il javascript.

Esempio per il profilo:

<script type="text/javascript"> 
    nickname = {{ profile.nickname|json_encode() }}; // Nickname will be a string 
    // 2nd solution if you have more informations related to profile 
    profile = { 
     nickname: {{ profile.nickname|json_encode() }}, 
     lastname: {{ profile.lastname|json_encode() }} 
    }; 
    // Profile is now an object with a nickname property. 
    // use profile.nickname on your javascripts 
</script> 
+0

per esempio ho questo var in ramoscello {{profile.nickname}}, se voglio usare il valore di {{profile.nickname}} all'interno del mio javascript? – Barno

+1

Ho aggiornato la mia risposta. – zapcost

+0

grazie per la risposta! – Barno

0

Utilizzare un attributo o qualsiasi tag

esempio: <span profile="{{ profile.nickname }}"></span>

10

La soluzione accettata non funziona (? Più) a causa del ramoscello autoescaping uscite, cambiare tutto il JSON " con &quot;

equivalente sarebbe ora necessario utilizzare il filtro raw:

<script type="text/javascript"> 
    nickname = {{ profile.nickname|json_encode()|raw }}; // Nickname will be a string 
    // 2nd solution if you have more informations related to profile 
    profile = { 
     nickname: {{ profile.nickname|json_encode()|raw }}, 
     lastname: {{ profile.lastname|json_encode()|raw }} 
    }; 
    // Profile is now an object with a nickname property. 
    // use profile.nickname on your javascripts 
</script> 

Detto, stampando direttamente il grezzo JSON in JavaScript può causare alcuni problemi, ha in questa configurazione:

<script> 
    var myvar = {{ '{"test": "</script>"}'|raw }}; 
</script> 

Il tag </script> nel JSON sarebbe interpretato dal parser HTML, causando uno script rotto.

Il modo veramente corretto per fare questo sarebbe piuttosto quello di stampare il JSON come stringa di escape, per poi analizzarlo all'interno dello script js:

<script> 
    var myvar = JSON.parse('{{ '{"test": "</script>"}'|e('js') }}'); 
</script> 
0

Prova questo:

var title = '{{ 'My Daily Activities'|trans({}, 'general') }}'; 

con Apostrofia aggiuntiva