使用的RadioType
列表不是很容易的,这就是为什么每个人都建议你使用ChoiceType
其动态创建取决于选择的数据阵列中的电台列表。
当您创建FormTypeInterface
时,它必须以全局形式表示(通常)一个字段或一个子表单,因此每个字段名称必须是唯一的以映射到相应的数据。
的buildForm
方法允许添加一些子领域中,你FormType
,在你的情况下,现场举行了2个个子场的单选按钮,每个人都有一个特定的名字,这是默认意图,但要始终牢记全局数组数据,你想处理。
这里是你的榜样:
class MyCustomFormType extends \Symfony\Component\Form\AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('friend', RadioType::class, array(
'label' => 'Friend',
'required' => false
))
->add('guide', RadioType::class, array(
'label' => 'Guide',
'required' => false
));
}
public function getBlockPrefix
{
return 'my_custom';
}
// ...
}
所以这种形式的类型的数据应该是这样的:
$myCustomFormData = array(
'friend' => $friendData,
'guide' => $guideData,
);
和嵌套在一个全球性的形式,这将是:
$formData = array(
'my_custom' => $myCustomFormData,
);
但你可以根据需要命名该字段:
// In a controller extending \Symfony\Bundle\FrameworkBundle\Controller\Controller
$form = $this->createFormBuilder()
->add('custom_field', MyCustomFormType::class)
->getForm();
// Then
$form->setData(array('custom_field' => $myCustomFormData));
注意,目前,因为你映射“朋友”和“指南”数据RadioType
他们应该持有一个布尔值:
$myCustomFormData = array(
'friend' => true, // checked
'guide' => false, // unchecked
);
但你会如何取消选择的值呢?
你应该有一个占位符,要做到这一点,并处理它,而提交...
此外,更改名称可以使用您的类型类的finishView
方法,它的FormView
(内置视图来完成你的类型),表单本身和选项参数:
public function finishView(FormView $view, FormInterface $form, array $options)
{
$childName = $view->vars['full_name']; // "my_custom" by default
foreach ($view as $childView) {
$childView->vars['full_name'] = $childName;
}
}
但你还需要增加一个DataMapperInterface
找回提交值表单类型本身,而不是。
要做到这一点,您需要知道表单组件的工作原理,这并不容易。
简单的方法
所以我跟其他的答案同意,你应该使用ChoiceType
把它弄出来的最箱。
我假设你的自定义窗体类型是如何选择或者是“朋友”或“引导”,所以它看起来是这样的:
$builder
->add('fellow', ChoiceType::class, array(
'choices' => array(
'I have a friend' => 'friend',
'I\'d like a guide' => 'guide',
),
'expanded' => true, // use a radio list instead of a select input
// ...
看一看the official docs
那么你的数据看起来像:
$form->add('custom_field', MyCustomFormType::class);
$form->setData(array(
'custom_field' => 'friend',
));
当呈现“朋友”的选择将被选中,你将能够改变它为“指导”。
为choices
选项选择数组需要标签作为键和选择值值:
<div id="form_custom_field">
<input type="radio" name="form[custom_field]" value="friend" checked="checked">
<label>I have a friend</label>
<input type="radio" name="form[custom_field]" value="guide">
<label>I'd like a guide</label>
...
使用的选择,扩大了真,多假。 ChoiceType :: class –
然后RadioType有什么意义? –