Symfony 5 -覆盖表单类型选项

y4ekin9u  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(119)

问题:

您好,我在Symfony 5 Form Builder中向表单字段传递一些选项时遇到了问题。
在控制器中创建表单:

$form = $this->createForm(FooFormType::class, $foo);

FooFormType.php中,我的**buildForm()**方法如下所示:

$builder
    ->add('collection', FooAutocompleteField::class, [ 
        'searchable_fields' => ['name'],
    ])
;

FooAutocompleteField.php中,我只有返回Symfony UX ParentEntityAutocompleteType::classgetParent()和如下所示的configureOptions()

public function configureOptions(OptionsResolver $resolver): void
{
    $resolver->setDefaults([
       'class' => Foo::class,
       'searchable_fields' => ['override_me'],
    ]);
}

我需要在FooFormType.php中替换searchable_fields,理想情况下,通过在控制器中传递一个选项,如下所示:

$form = $this->createForm(FooFormType::class, $foo,[
    'searchable_fields' => ['name'],
]);

我尝试过的:

1.将选项传递到构建器中,如上例所示
1.在配置FooAutocompleteField.php的选项后添加$resolver->setDefined('searchable_fields');
1.我在FooAutocompleteField.php中创建了一个buildForm()方法,$options确实发生了变化,但 configureOptions() 中的默认值没有被覆盖。

更新日期2023年2月22日:

当我这样做时(添加一个attr选项):

$builder
    ->add('collection', FooAutocompleteField::class, [ 
        'searchable_fields' => ['name'],
        'attr' = [
           'class' => 'bg-primary',
           'placeholder' => 'THIS IS OVERRIDING',
        ]
    ])
;

这些选项实际上被覆盖并传递给FooAutocompleteField
但是**为什么不搜索“searchable_fields”**呢?
看起来初始的表单选择选项被覆盖了,但是 AJAX 调用自己使用默认配置。

h5qlskok

h5qlskok1#

这是symfony/ux的一个已知问题:(目前无法真正修复。)
下面是github的问题:https://github.com/symfony/ux/issues/420
在使用 AJAX 自动完成字段时,确实不能传递/覆盖ANY选项,这是因为在Ajax调用时,我们无法重新创建AnyForm表单(我们什至不知道它),我们只需重新创建FoodAutocompleteField,然后使用它的query_builder。
资料来源:Ryan Weaver

相关问题