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
相关产品推荐
相关产品推荐

