Symfony:扩展内置类型时如何根据另一个选项更改表单类型选项?

Symfony: How to change Form Type option based on another option when extending built-in type?

我想为 Admin class 的 EntityType 创建自定义类型以利用代码重用,我有以下代码:

class AdminEntityType extends AbstractType
{

    public function getParent(): string
    {
        return EntityType::class;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'class' => Admin::class,
            'label' => 'Admin :',
            'multiple' => false,
        ]);
    }
}

我想根据 $options['multiple'] 值修改 $options['attr']['class']。类似于:

    public function buildView(FormView $view, FormInterface $form, array $options)
    {

        if ($options['multiple']) {
            $options['attr']['class'] = 'form-control select select2-hidden-accessible';
        } else {
            $options['attr']['class'] = 'form-control select-search';
        }

        parent::buildView($view, $form, $options);
    }

但是代码不起作用。什么是正确的方法?

然后在我的表单中我想使用

$builder->add(
    'admin',
    AdminEntityType::class,
    [
        'multiple' => true
    ]
);

并决定 multiple 参数,这应该对 attr.class 参数有影响。

使用 Symfony 5.4

最后我设法获得了想要的功能,如下所示:

    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        parent::buildView($view, $form, $options);

        if ($options['multiple']) {
            $view->vars['attr']['class'] = 'form-control select select2-hidden-accessible';
        } else {
            $view->vars['attr']['class'] = 'form-control select-search';
        }
    }

虽然不确定其方法是否正确