Symfony 5 -覆盖表单类型选项

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

问题:

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

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

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

  1. $builder
  2. ->add('collection', FooAutocompleteField::class, [
  3. 'searchable_fields' => ['name'],
  4. ])
  5. ;

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

  1. public function configureOptions(OptionsResolver $resolver): void
  2. {
  3. $resolver->setDefaults([
  4. 'class' => Foo::class,
  5. 'searchable_fields' => ['override_me'],
  6. ]);
  7. }

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

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

我尝试过的:

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

更新日期2023年2月22日:

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

  1. $builder
  2. ->add('collection', FooAutocompleteField::class, [
  3. 'searchable_fields' => ['name'],
  4. 'attr' = [
  5. 'class' => 'bg-primary',
  6. 'placeholder' => 'THIS IS OVERRIDING',
  7. ]
  8. ])
  9. ;

这些选项实际上被覆盖并传递给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

相关问题