在树枝模板(EasyAdmin)

时间:2018-02-01 16:24:37

标签: symfony twig

我在Symfony 4中使用EasyAdmin,我想在twig模板中设置一些字段为禁用true或false取决于用户角色。

例如

{{ dump(form.role.vars.disabled) }}

显示true

我想将其设置为false

{% block entity_form %}
    {% set form.role.vars.disabled = false %}
    {{ form(form) }}
{% endblock entity_form %}

但是我收到了错误

  

意外的令牌"标点符号"价值"。" ("声明块结束"   预期)。

此外,我尝试将其合并为数组但出现错误。

如何正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

您需要使用merge filter来更新数组或散列值。您有一个深度嵌套的哈希,因此您需要多次使用merge过滤器:

{% set form = form|merge({
    role: form.role|merge({
        vars: form.role.vars|merge({
            disabled: false
        })
    })
}) %}

See TwigFiddle.(我使用{{ var ? 'true' : 'false' }}代替{{ dump(var) }},因为TwigFiddle不支持dump功能。)

<强>更新

上述代码在您的情况下不起作用,因为merge过滤器将FormView对象转换为数组。您需要创建一个Twig扩展来更改对象的属性。看看这个类似的问题:Set value of single object in multidimensional array in twig template

或者更好的方法可能是在控制器中(或者在配置表单的任何地方)执行此类操作,如@yceruto建议的那样。