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,如果您在其中一个字符串中有引号,它将破坏您的 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

接受的解决方案不起作用(不再?)因为树枝自动转义输出,"&quot; 更改所有 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>
于 2016-06-02T11:02:41.717 回答
2

尝试这个:

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

带有额外的撇号

于 2017-05-11T09:33:41.787 回答
0

使用属性或任何标签

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

于 2016-02-19T17:29:41.477 回答