Symfony 设置FormType';基于同级FormType的数据动态地选择?
我有一个带有自定义ChoiceType的Symfony表单,它需要根据另一个字段(同一表单中的同级表单类型)的值筛选可用选项 我使用的EasyAdmin CMS不允许其字段将其他动态Symfony 设置FormType';基于同级FormType的数据动态地选择?,symfony,symfony4,symfony-forms,easyadmin,Symfony,Symfony4,Symfony Forms,Easyadmin,我有一个带有自定义ChoiceType的Symfony表单,它需要根据另一个字段(同一表单中的同级表单类型)的值筛选可用选项 我使用的EasyAdmin CMS不允许其字段将其他动态type_选项传递给表单类型。我希望自定义ChoiceFormType能够封装关于如何解析其自身选项的逻辑 但基于其他表单数据修改选项似乎是不可能的。 表单数据在buildForm()中为NULL;我可以从FormEvents访问它 在FormEvents::PRE_SET_DATA内部,我无法将当前类型替换为具有
type_选项
传递给表单类型。我希望自定义ChoiceFormType能够封装关于如何解析其自身选项的逻辑
但基于其他表单数据修改选项似乎是不可能的。
- 表单数据在
buildForm()中为
;我可以从NULL
访问它FormEvents
- 在
内部,我无法将当前类型替换为具有修改选项的类型FormEvents::PRE_SET_DATA
$event->setData()
只对当前表单类型有效,而不是对整个表单有效
基于同级表单类型的值,让表单类型动态设置自己的选项的模式是什么?
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($builder, $options) {
$parent = $event->getForm()->getParent();
$parent_data = $parent-getData();
$other_field_value = $parent_data->getOtherFieldValue();
$filtered_choices = array_filter(fn($choice) => $choice !== $other_field_value);
$options['choices'] = $filtered_choices;
$parent->add($form, get_class($this), $options); // THIS FAILS
}