具有动态表单名称的 form_widget

kew*_*e20 5 php symfony twig

在我的 Twig 模板中,我有一个 FOR 循环,它创建多个表单,如下所示:

{% for thing in things %}

{% set form_id = 'myform_' ~ thing.Id %}

{% set form_name = attribute(form, 'myform_' ~ thing.Id) %}


 {{ form_widget(form_id) }}
 {{ form_widget(form_name) }}


{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我希望生成以下内容:

   {{ form_widget(myform_1) }}

   {{ form_widget(myform_2) }}
Run Code Online (Sandbox Code Playgroud)

.... 等等。

我在那里留下了我的两次失败的尝试(form_idform_name),以避免任何人提出这些可能的解决方案。

总结一下;我需要将动态创建的值(myform_1, myform_2)插入其中
{{ form_widget() }}

dar*_*men 6

您可以使用 Twig 的特殊功能在 Twig 中渲染具有动态名称的动态字段形式:

{{ attribute(object, method) }}
{{ attribute(object, method, arguments) }}
{{ attribute(array, item) }}
Run Code Online (Sandbox Code Playgroud)

使用此功能,您可以轻松地为您的字段动态生成动态字符串名称到您的表单中,如下所示

{{ form_widget(attribute(form, 'myfielddynamicname' ~ var ~ ' lastchar')) }}
Run Code Online (Sandbox Code Playgroud)

使用此变量“ var ”(数组或其他类型),您可以渲染许多动态表单名称,例如:

  • myfielddynamicname foo lastchar
  • myfielddynamicnameLastchar
  • myfielddynamicnameLastchar

为了更多的理解,你可以阅读这个官方的 twig 文档函数

这里:属性树枝函数文档


小智 1

thingsmyform_1myform_2只是您在控制器中定义的带有 FormView 对象的变量。我不知道 Twig 是否允许动态变量调用,尽管您可以在传递到视图之前将这些表单对象收集在控制器的数组中。完成此步骤后,您可以迭代认为该数组它将解决您面临的问题。