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
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>
La solution acceptée ne fonctionne plus (plus?) Car Twig encapsule automatiquement les sorties et modifie tous les codes JSON "
avec "
;.
É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>
Essaye ça:
var title = '{{ 'My Daily Activities'|trans({}, 'general') }}';
avec apostrophie supplémentaire
Utilisez un attribut ou une balise
exemple: <span profile="{{ profile.nickname }}"></span>