{{app.user}}をJavaScriptに渡すにはどうすればよいですか?
今のところ、私は次のようなブロックを行います。
<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>
これらのパラメーターはconfig.ymlで設定されます
選択したソリューションの正確な問題が何であるかわかりません。{{app.user}}でうまく機能するはずですが、app.userはオブジェクトなので、ユーザーにtoArray関数を呼び出して次のように呼び出す必要があります。
app_user = {{ app.user.toArray|json_encode() }};
または、{{app.user.id}}のようなユーザーの各パラメータを呼び出します
ドキュメント: https://twig.sensiolabs.org/doc/filters/json_encode.html
上記の変数にはjson_encodeを使用する必要があります。文字列の1つに引用符があると、JavaScriptが壊れます。
プロファイルの例:
<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>
twig出力を自動エスケープしてすべてのJSON "
を"
;に変更するため、承認されたソリューションは機能しません(もう?))。
同等のものは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>
そうは言っても、未加工のJSONをJavaScriptに直接印刷すると、いくつかの問題が発生する可能性があります。
<script>
var myvar = {{ '{"test": "</script>"}'|raw }};
</script>
JSONの</script>
タグは、HTMLパーサーによって解釈され、スクリプトが壊れます。
これを行う正しい方法は、JSONをエスケープ文字列として出力し、jsスクリプト内で解析することです。
<script>
var myvar = JSON.parse('{{ '{"test": "</script>"}'|e('js') }}');
</script>
これを試して:
var title = '{{ 'My Daily Activities'|trans({}, 'general') }}';
追加のアポストロフィ付き
属性または任意のタグを使用する
例:<span profile="{{ profile.nickname }}"></span>