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';
}
}
虽然不确定其方法是否正确
我想为 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';
}
}
虽然不确定其方法是否正确