选择字段默认值

时间:2016-03-03 12:14:48

标签: php symfony symfony3.x

我有以下表格:

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

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

如何在呈现表单时默认选中'Friend'复选框?

4 个答案:

答案 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());
}