Symfony 设置FormType';基于同级FormType的数据动态地选择?

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内部,我无法将当前类型替换为具有

我有一个带有自定义ChoiceType的Symfony表单,它需要根据另一个字段(同一表单中的同级表单类型)的值筛选可用选项

我使用的EasyAdmin CMS不允许其字段将其他动态
type_选项
传递给表单类型。我希望自定义ChoiceFormType能够封装关于如何解析其自身选项的逻辑

但基于其他表单数据修改选项似乎是不可能的。
  • 表单数据在
    buildForm()中为
    NULL
    ;我可以从
    FormEvents
    访问它
  • FormEvents::PRE_SET_DATA
    内部,我无法将当前类型替换为具有修改选项的类型
尝试设置基于表单数据动态解析的选项失败,原因是:

检测到一个循环。PRE_SET_DATA事件的侦听器不能调用setData()。您应该在FormEvent对象上调用setData()

但是
$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
    }