致命错误:未捕获的异常“Twig_Error_Syntax”带有消息“意外标记“标点符号”

use*_*249 2 php twig

我尝试将我的 php 代码转换为 Twig 代码。

代码:

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

给树枝:

{% for language in languages %}
    {% if not my_title[language.language_id] %}
      {% set my_title[language.language_id] = "MY Title" %}
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是,确实得到以下错误。

致命错误:未捕获的异常 'Twig_Error_Syntax' 带有消息 'Unexpected token "punctuation" of value "[" ("end of statement block" expected) in....

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

Edi*_*rić 5

您不能直接在 Twig 中向数组或散列添加项目。您需要使用merge过滤器,如下所示:

{% set my_title = my_title|merge({(language.language_id): 'MY Title'}) %}
Run Code Online (Sandbox Code Playgroud)

注意周围的括号language.language_id。那是因为散列键不能是表达式,而是文字。周围的括号language.language_id确保在用作散列键之前评估表达式。

此外,if如果my_titlehash 没有将密钥存储在language.language_id变量中,您的语句将失败。你应该is defined在那里使用test 。

完整示例:

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