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

EasyAdmin在Twig中修改field.formTypeOptions属性出现语法错误如何解决

问题原因

Twig 语法不支持使用 {% set %} 直接修改对象的属性值,也就是你不能写 {% set 对象.属性 = 新值 %} 格式的语句,所以你的赋值语句会抛出语法错误。你之前测试可以给新变量 x 赋值正常,是因为你创建了全新的变量,没有修改原有 field 对象的属性。

解决方案

你不需要修改原 field 对象,直接在引入字段模板时,传入覆盖了 formTypeOptions 的参数即可,代码如下:

{% for field in entity.fields %}
    {# 禁用当前用户自己的active字段 #}
    {% set formTypeOptions = field.formTypeOptions %}
    {% if is_granted('IS_AUTHENTICATED_FULLY') and app.user.id == entity.instance.id and field.property == 'active' %}
        {% set formTypeOptions = formTypeOptions|merge({'disabled': true}) %}
    {% endif %}

    <td data-label="{{ field.label|e('html_attr') }}" class="{{ field.property == sort_field_name ? 'sorted' }} text-{{ field.textAlign }} {{ field.cssClass }}" dir="{{ ea.i18n.textDirection }}">
        {{ include(field.templatePath, {
            field: {
                'label': field.label,
                'property': field.property,
                'templatePath': field.templatePath,
                'textAlign': field.textAlign,
                'cssClass': field.cssClass,
                'formTypeOptions': formTypeOptions
            }|merge(field),
            entity: entity
        }, with_context = false) }}
    </td>
{% endfor %}

如果上面的合并对象写法不生效(部分版本EasyAdmin的Field对象不支持直接在Twig中合并),你也可以换个更简单的实现:在需要禁用的场景下,直接把禁用属性写到td的子元素上,或者直接用你最初的自定义模板方案,相比修改Twig逻辑,自定义模板的维护成本反而更低。

另外注意disabled属性要传布尔值true,不要传字符串'true',否则部分表单组件不会识别禁用状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:06:08