我有以下表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
)
));
}
如何在呈现表单时默认选中'Friend'复选框?
答案 0 :(得分:18)
我认为您应该尝试使用data
选项,但只是在您甚至没有在对象中保存数据的情况下,因为它会覆盖其他内容。< / p>
重要:它适用于创建操作,但不适用于编辑操作。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
),
'data' => 'friend'
));
}
<强> Official link 强>
提取:
创建表单时,每个字段最初显示的值 表单域对象的相应属性(如果对象是 绑定到表格)。如果要覆盖的初始值 只需单个字段或单个字段,您可以在数据选项
中进行设置
更新如果您需要空值:
如下所示,如果您在任何情况下需要更新默认值,请将data
替换为empty_data
答案 1 :(得分:16)
使用empty_data
表单字段选项。 (不是data
,因为它会覆盖任何发布的数据,除非你动态设置它。)
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'choices' => array(
'Friend' => 'friend',
'Guide' => 'guide'
),
'empty_data' => 'friend'
));
}
复杂案例的另一个选择是使用Sf Dynamic Form Events。
答案 2 :(得分:3)
如果您不想覆盖某个版本的价值,可以执行以下操作:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$form = $event->getForm();
$form->add(
'type',
ChoiceType::class,
[
'expanded' => true,
'multiple' => false,
'choices' => [
'Friend' => 'friend',
'Guide' => 'guide'
],
'data' => $event->getData() ?: 'friend'
]);
});
}
答案 3 :(得分:2)
我认为最好在Entity构造函数中设置初始值:
public function __construct()
{
$this->exercises = new ArrayCollection();
$this->setTitle("WOCHE#") ;
$this->setYear(date('Y'));
$this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}