20

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

4

4 に答える 4

26

選択したソリューションの問題が正確にはわかりません。 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>
于 2013-10-03T18:50:47.403 に答える
23

承認されたソリューションは機能しません (もう ?) 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>
于 2016-06-02T11:02:41.717 に答える
0

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

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

于 2016-02-19T17:29:41.477 に答える