You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twig模板for循环内使用switch标签触发语法错误该如何解决?

错误成因

  1. 原生Twig核心默认不支持{% switch %}/{% case %}语法,该语法属于可选扩展功能。未安装启用对应扩展时,Twig解析器无法识别switch标签,会错误判定外层for循环标签未正常闭合,触发语法报错。
  2. 代码自身存在两处语法问题也会干扰解析逻辑:
    • textarea标签未正确闭合,代码中仅写了</textarea,缺少末尾的>
    • 表格行标签使用错误,<tr>打开后未写闭合标签</tr>,反而多了一个新的<tr>开启标签,同时调试用pre标签直接放在tbody内不符合HTML结构规范,进一步提升了解析报错概率。

解决办法

方案1:替换为原生支持的if分支结构(无需额外安装扩展,推荐)

将switch分支直接替换为Twig原生兼容的{% if %}/{% elseif %}结构,修正后的代码如下:

<h1>{{title}}</h1>
<div class="container">
    {% for section, setting_data in settings %}
        <h4>{{section|title}}</h4>
        <table class="table">
            <thead>
                <th>Name</th>
                <th>Value</th>
            </thead>
            <tbody>
            {% for setting_name, setting in setting_data %}
                <tr>
                    <td>{{setting_name}}</td>
                    <td>
                        {% if setting.display_type == constant('\\Settings::DISPLAY_INPUT') %}
                            <input type="text" name="settings[{{setting.setting_id}}]" value="{{setting.value}}" />
                        {% elseif setting.display_type == constant('\\Settings::DISPLAY_CHECKBOX') %}
                            <input type="hidden" name="settings[{{setting.setting_id}}]" value="" />
                            <input type="checkbox" name="settings[{{setting.setting_id}}]" value="1" {%if setting.value=="Y"%}checked="checked"{%endif%} />
                        {% elseif setting.display_type == constant('\\Settings::DISPLAY_TEXT') %}
                            <textarea name="settings[{{setting.setting_id}}]">{{setting.value}}</textarea>
                        {% endif %}
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <pre>section={{section}}, setting_name={{setting_name}}, setting:{{name}}={{setting.value}}</pre>
                    </td>
                </tr>
            {%endfor%}
            </tbody>
        </table>
    {%endfor%}
</div>

方案2:安装启用Switch扩展

如果你希望继续使用switch语法,可按照以下步骤操作:

  1. 用composer安装Twig扩展包:
    composer require twig/extensions
  2. 在你的项目Twig环境初始化代码中,注册Switch扩展:
    $twig->addExtension(new \Twig\Extensions\SwitchExtension());
    
  3. 修正代码中textarea闭合、tr标签结构的问题即可正常运行。

内容的提问来源于stack exchange,提问作者Tbirnseth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:36:01