web-dev-qa-db-ja.com

変数Twig

{{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で設定されます

12
Barno

選択したソリューションの正確な問題が何であるかわかりません。{{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>
19
zapcost

twig出力を自動エスケープしてすべてのJSON "&quot;に変更するため、承認されたソリューションは機能しません(もう?))。

同等のものは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>
17
Lulhum

これを試して:

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

追加のアポストロフィ付き

2
AV Jaworski

属性または任意のタグを使用する

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

0
jink