FormBuilder - 使用 ChoiceView 代替 ChoiceType

FormBuilder - Use ChoiceView instead with ChoiceType

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

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

就目前而言,当我们在 twig 视图中转储 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 时构建表单的方法吗?

如果你想操作 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'))
    );
}