Symfony5 表单 - 在标签内渲染无线电输入
Symfony5 forms - render radio input inside label
我想在它们的标签内呈现 radio 类型的输入,因为我想使用 flexbox 来证明它们在每个标签之间有 space。
这是 RegistrationType 的一部分 class
...
->add('gender', ChoiceType::class, [
'required' => true,
'expanded' => true,
'multiple' => false,
'label' => false,
'choices' => [
'male' => 'male',
'female' => 'female',
'other' => 'other',
],
])
这个class的配置选项是默认的:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
我想达到给定的结果:
<div style="display:flex; flex-direction:row; justify-content:space-between; width:22rem;">
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="male">
Male
</label>
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="female">
Female
</label>
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="other">
Other
</label>
</div>
有什么办法吗?
类似于 here, and supported by the Field Variables of the ChoiceType class,您可以访问 .choices
属性并像这样循环遍历它:
<div style="display:flex; flex-direction:row; justify-content:space-between; width:22rem;">
{{ form_label(form.gender) }}
<div>
{% for key,val in form.gender.vars.choices %}
<label>
<input type="radio"
name="{{ form.gender.vars.full_name }}"
required="required"
class="required"
value="{{ val.value }}"
/>
{{ val.label | trans }} />
{% endfor %}
</div>
</div>
有更优雅的自定义方式,例如创建或覆盖使用 Form Theme, or, perhaps using a twig macro to keep your code somewhat DRY. If you go the form theme route, look into the way that the attributes block – 我们绕过了它在上面的示例中提供的大部分实用程序。
我想在它们的标签内呈现 radio 类型的输入,因为我想使用 flexbox 来证明它们在每个标签之间有 space。
这是 RegistrationType 的一部分 class
...
->add('gender', ChoiceType::class, [
'required' => true,
'expanded' => true,
'multiple' => false,
'label' => false,
'choices' => [
'male' => 'male',
'female' => 'female',
'other' => 'other',
],
])
这个class的配置选项是默认的:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
我想达到给定的结果:
<div style="display:flex; flex-direction:row; justify-content:space-between; width:22rem;">
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="male">
Male
</label>
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="female">
Female
</label>
<label>
<input type="radio"
name="registration_form[gender]"
required="required"
class="required"
value="other">
Other
</label>
</div>
有什么办法吗?
类似于 .choices
属性并像这样循环遍历它:
<div style="display:flex; flex-direction:row; justify-content:space-between; width:22rem;">
{{ form_label(form.gender) }}
<div>
{% for key,val in form.gender.vars.choices %}
<label>
<input type="radio"
name="{{ form.gender.vars.full_name }}"
required="required"
class="required"
value="{{ val.value }}"
/>
{{ val.label | trans }} />
{% endfor %}
</div>
</div>
有更优雅的自定义方式,例如创建或覆盖使用 Form Theme, or, perhaps using a twig macro to keep your code somewhat DRY. If you go the form theme route, look into the way that the attributes block – 我们绕过了它在上面的示例中提供的大部分实用程序。