wake-up-neo.com

variable Twig in Javascript

Wie kann ich {{app.user}} in Javascript eingeben?

für jetzt mache ich einen block wie;

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

wo diese Parameter in config.yml eingestellt werden

8
Barno

Ich verstehe nicht, was genau Ihr Problem mit der von Ihnen gewählten Lösung ist, es sollte gut mit {{app.user}} funktionieren, mit der Ausnahme, dass app.user ein Objekt ist. Sie sollten also eine toArray-Funktion in Ihrem Benutzer haben und Folgendes aufrufen:

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

Oder rufen Sie jeden Parameter des Benutzers wie {{app.user.id}} auf.

Dokumentation: https://twig.sensiolabs.org/doc/filters/json_encode.html

Sie sollten json_encode für Ihre Variablen oben verwenden. Wenn Sie ein Zitat in einen String einfügen, wird Ihr Javascript beschädigt.

Beispiel für das Profil:

<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>
17
zapcost

Die akzeptierte Lösung funktioniert nicht mehr (mehr?), Da die Ausgänge automatisch mit einem Zweig versehen werden und der gesamte JSON-Code " mit &quot; geändert wird.

Äquivalent müsste jetzt den raw-Filter verwenden:

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

Allerdings kann das direkte Drucken des rohen JSON in das Javascript einige Probleme verursachen.

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

Das </script>-Tag in der JSON wird vom HTML-Parser interpretiert, was zu einem fehlerhaften Skript führt.

Der wirklich korrekte Weg, dies zu tun, wäre eher, den JSON als eine Escape-Zeichenfolge zu drucken und ihn dann im Skript js zu parsen:

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

Versuche dies: 

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

mit zusätzlicher Apostrophie

1
AV Jaworski

Verwenden Sie ein Attribut oder ein beliebiges Tag

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

0
jink