致命错误:未捕获的异常'Twig_Error_Syntax',消息'Unexpected token'标点符号“

时间:2017-09-09 10:02:17

标签: php twig

我试图将我的PHP代码转换为Twig代码。

Php代码:

<?php foreach ($languages as $language) { 
    if(empty($my_title[$language["language_id"]])){$my_title[$language["language_id"]] ="MY Title";}
?>

到Twig:

{% for language in languages %}
    {% if not my_title[language.language_id] %}
      {% set my_title[language.language_id] = "MY Title" %}
    {% endif %}
{% endfor %}

但是,会出现以下错误。

  

致命错误:带有消息的未捕获异常'Twig_Error_Syntax'   '意外的标记“标点符号”的值“[”(“结束语句块”   在...中预期...

这里有什么问题?如何在树枝中正确编写这段代码?

1 个答案:

答案 0 :(得分:3)

您无法直接在Twig中向数组或哈希中添加项目。您需要使用merge过滤器,如下所示:

{% set my_title = my_title|merge({(language.language_id): 'MY Title'}) %}

注意language.language_id周围的括号。这是因为哈希键不能是表达式而是文字。围绕language.language_id的括号确保在用作哈希键之前计算表达式。

此外,如果if哈希没有将密钥存储在my_title变量中,则language.language_id语句将失败。你应该在那里使用is defined测试。

完整示例:

{% for language in languages %}
    {% if not my_title[language.language_id] %}
        {% set my_title = my_title|merge({(language.language_id): 'MY Title'}) %}
    {% endif %}
{% endfor %}