web-dev-qa-db-fra.com

variable brindille en Javascript

Comment puis-je passer {{app.user}} en Javascript?

pour l'instant je fais un bloc comme;

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

où ces paramètres sont définis dans config.yml

8
Barno

Je ne comprends pas quel est exactement votre problème avec la solution que vous choisissez, cela devrait bien fonctionner avec {{app.user}} sauf que app.user est un objet, vous devriez donc avoir une fonction toArray dans votre utilisateur et appeler:

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

Ou appelez chaque paramètre de l'utilisateur comme {{app.user.id}}

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

Vous devez utiliser json_encode pour vos variables ci-dessus. Si vous avez une citation dans l'une de vos chaînes, votre javascript sera cassé.

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

La solution acceptée ne fonctionne plus (plus?) Car Twig encapsule automatiquement les sorties et modifie tous les codes JSON " avec &quot ;.

Équivalent devrait maintenant utiliser le filtre 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>

Cela étant dit, imprimer directement le JSON brut dans le javascript peut causer des problèmes, a dans cette configuration:

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

La balise </script> du code JSON serait interprétée par l’analyseur HTML, ce qui entraînerait un script endommagé.

La façon vraiment correcte de faire cela serait plutôt d’imprimer le JSON en tant que chaîne échappée, puis de l’analyser dans le script js:

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

Essaye ça: 

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

avec apostrophie supplémentaire

1
AV Jaworski

Utilisez un attribut ou une balise

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

0
jink