选择字段默认值

Ale*_*mia 20 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'
        )
    ));
}
Run Code Online (Sandbox Code Playgroud)

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

Pim*_*Web 18

我认为你应该尝试使用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'
        ));
    }
Run Code Online (Sandbox Code Playgroud)

官方链接

提取:

创建表单时,每个字段最初显示表单域对象的相应属性的值(如果对象绑定到表单).如果要覆盖表单的初始值或仅覆盖单个字段,可以在数据选项中设置它

更新如果你需要空的价值:

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

  • 我不认为这是安全的:从symfony自己的文档> __数据选项总是覆盖渲染时从域数据(对象)获取的值.这意味着当表单编辑已经存在的对象时,对象值也会被覆盖,导致它在提交表单时丢失它的持久值.__ (9认同)
  • NOPE NOPE NOPE!问题是关于默认值.如果你指定`data`不仅不会安全,而且你永远不会编辑你的值:p(期望你动态改变它)......正如上面提到的评论...不要用那个!请改用'empty_data`! (3认同)
  • 不客气,我正在为未来与您情况相同的人更新。 (2认同)

Rom*_*ert 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'
    ));
}
Run Code Online (Sandbox Code Playgroud)

复杂案例的另一个选择是使用Sf动态表单事件.

  • 注意:这不会在显示中设置默认值,只有当你提交数据时,如果没有提交,就会采用这个值 (6认同)

Fab*_*les 5

如果您不想覆盖某个版本的价值,则可以执行以下操作:

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'
            ]);
    });
}
Run Code Online (Sandbox Code Playgroud)