FormBuilder - 使用ChoiceView而不是ChoiceType

时间:2018-03-22 14:43:36

标签: symfony symfony-forms

我试图在disabled的占位符上设置ChoiceType

虽然我在SO上找到了一些答案,但我无法应用它们。 与此同时,我注意到了一些事情,并且需要这样做。

按照目前的情况,当我们在树枝视图中转储choices时,我们会注意到choices是由多个ChoiceView组成的数组。

因此,我想,也许,我可以直接在formBuilder中使用ChoiceView,如下所示:

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('title')
            ->add('desc')
            ->add('status', ChoiceType::class, array(
                'choices'=>array(
                    new ChoiceView('', '', 'Select a status, array('disabled'=>'disabled')),
                    'Draft'=>'draft',
                    'Complete'=>'complete',
                    'Aborted'=>'aborted',
                ),
            ));
}

但除此之外,它不起作用......

有没有人知道在使用ChoiceView时构建表单的方法?

1 个答案:

答案 0 :(得分:2)

如果要操作FormView个对象,则必须在FormType上实现finishView方法。

在您的具体案例中:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add(
        'status',
        ChoiceType::class,
        array(
            'choices' => array(
                'Draft' => 'draft',
                'Complete' => 'complete',
                'Aborted' => 'aborted',
            ),
        )
    );
}

public function finishView(FormView $view, FormInterface $form, array $options)
{
    array_unshift(
        $view->children['status']->vars['choices'],
        new ChoiceView('', '', 'Select a status', array('disabled' => 'disabled'))
    );
}