Symfony - 通过引用访问表单名称
Symfony - Access form name by reference
我有一个包含许多问题的表格。它们不依赖于实体,因此以 class
形式动态生成
class QuestionnaireType extends AbstractType
{
private $questions = [
0 => 'Question 1',
1 => 'Question 2',
2 => 'Question 3',
];
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($this->questions as $key => $val) {
$builder->add($key, ChoiceType::class, [
'choices' => [
1 => 'Yes',
2 => 'No',
]
]);
}
}
}
我想循环访问我的 twig 模板中的这些表单元素。我尝试了以下但它不起作用:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(form.i) }}
{{ form_widget(form.i) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}
是否可以从 twig 模板中通过引用访问表单元素?
form.i
不起作用,因为您没有名为 i
的表单字段,并且当通过 foo.bar
访问数组或对象属性时,Twig 不会尝试解释 bar
作为变量。
也就是说,您还可以通过语法 foo[bar]
访问数组键和对象属性,其中 bar
将始终 被解释为变量,并且其中 foo['bar']
将等同于 foo.bar
.
所以在你的情况下,form[i]
.
所以这应该适用于您的情况:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(form[i]) }}
{{ form_widget(form[i]) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}
另一个解决方案是使用 attribute
函数:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(attribute(form, i)) }}
{{ form_widget(attribute(form, i)) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}
我有一个包含许多问题的表格。它们不依赖于实体,因此以 class
形式动态生成class QuestionnaireType extends AbstractType
{
private $questions = [
0 => 'Question 1',
1 => 'Question 2',
2 => 'Question 3',
];
public function buildForm(FormBuilderInterface $builder, array $options)
{
foreach ($this->questions as $key => $val) {
$builder->add($key, ChoiceType::class, [
'choices' => [
1 => 'Yes',
2 => 'No',
]
]);
}
}
}
我想循环访问我的 twig 模板中的这些表单元素。我尝试了以下但它不起作用:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(form.i) }}
{{ form_widget(form.i) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}
是否可以从 twig 模板中通过引用访问表单元素?
form.i
不起作用,因为您没有名为 i
的表单字段,并且当通过 foo.bar
访问数组或对象属性时,Twig 不会尝试解释 bar
作为变量。
也就是说,您还可以通过语法 foo[bar]
访问数组键和对象属性,其中 bar
将始终 被解释为变量,并且其中 foo['bar']
将等同于 foo.bar
.
所以在你的情况下,form[i]
.
所以这应该适用于您的情况:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(form[i]) }}
{{ form_widget(form[i]) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}
另一个解决方案是使用 attribute
函数:
{% block content %}
{{ form_start(form) }}
{{ form_errors(form) }}
{% for i in 0..2 %}
{{ form_label(attribute(form, i)) }}
{{ form_widget(attribute(form, i)) }}
{% endfor %}
{{ form_end(form) }}
{% endblock %}