问题:
您好,我在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::class
的getParent()和如下所示的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 调用自己使用默认配置。
1条答案
按热度按时间h5qlskok1#
这是symfony/ux的一个已知问题:(目前无法真正修复。)
下面是github的问题:https://github.com/symfony/ux/issues/420
在使用 AJAX 自动完成字段时,确实不能传递/覆盖ANY选项,这是因为在Ajax调用时,我们无法重新创建AnyForm表单(我们什至不知道它),我们只需重新创建FoodAutocompleteField,然后使用它的query_builder。
资料来源:Ryan Weaver