【问题标题】:Set value in form field in twig template (EasyAdmin)在树枝模板的表单字段中设置值(EasyAdmin)
【发布时间】:2018-02-01 16:24:36
【问题描述】:

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

例如

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

显示true

我想设置为假

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

但我得到了错误

值“.”的意外标记“标点符号” ("语句块结束" 预期)。

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

如何正确做?

【问题讨论】:

  • 为什么不在表单配置中这样做?

标签: symfony twig


【解决方案1】:

您需要使用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 建议的那样在控制器(或配置表单的任何位置)中执行此类操作。

【讨论】:

  • 我已经尝试过合并。并得到错误Type error: Argument 1 passed to Symfony\Component\Form\FormRenderer::renderBlock() must be an instance of Symfony\Component\Form\FormView, array given, called in...。它位于被覆盖的 EasyAdmin 模板 edit.html.twig
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多