29

我有以下表格:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
    ->add('type', ChoiceType::class, array(
        'expanded' => true,
        'multiple' => false,

        'choices' => array(
            'Friend' => 'friend',
            'Guide' => 'guide'
        )
    ));
}

如何在呈现表单时默认选中“朋友”复选框?

4

4 回答 4

32

我认为你应该尝试使用data选项,但这只是在你甚至没有在你的对象中保存数据的情况下,因为它会覆盖它。

重要提示:它适用于创建操作,但不适用于编辑操作。

 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'
        ));
    }

官方链接

提取物

创建表单时,每个字段最初都会显示表单域对象的相应属性的值(如果对象绑定到表单)。如果你想覆盖表单的初始值或者只是一个单独的字段,你可以在数据选项中设置它

更新如果您需要空值

如下面的答案,如果您在任何情况下都需要更新默认值,请替换dataempty_data

于 2016-03-03T12:47:46.280 回答
18

使用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

于 2017-07-18T08:49:03.017 回答
8

如果您不想覆盖某个版本的值,您可以这样做:

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'
            ]);
    });
}
于 2018-07-26T15:30:50.803 回答
2

我认为在 Entity 构造函数中设置初始值会更好:

public function __construct()
{
    $this->exercises = new ArrayCollection();

    $this->setTitle("WOCHE#") ;

    $this->setYear(date('Y'));

    $this->setWeekInCalendar(Week::getCurrentWeekInCalendar());
}
于 2018-08-01T09:13:52.210 回答