如何解决根据同级 FormType 的数据动态设置 FormType 的选项? 让 FormType 根据同级表单类型的值动态设置自己的选项的模式是什么?
我有一个带有自定义 ChoiceType 的 Symfony 表单,它需要根据另一个字段的值(同一表单中的同级表单类型)过滤可用选项。
我使用的 EasyAdmin CMS 不允许其字段将额外的动态 type_options
传递给它们的表单类型 because of it YAML configuration。我希望自定义 ChoiceFormType 封装有关如何解决其自身选项的逻辑。
但是根据其他表单数据修改选项似乎是不可能的。
- 表单数据在
NULL
里面是buildForm()
;我只能从FormEvents
访问它。 - 在
FormEvents::PRE_SET_DATA
中,我无法将当前类型替换为具有修改选项的类型。
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
}
尝试设置基于表单数据动态解析的选项失败:
检测到一个循环。 PRE_SET_DATA 事件的侦听器不得调用 setData()。您应该改为在 FormEvent 对象上调用 setData()。
但 $event->setData()
仅适用于当前 FormType,而不适用于整个表单。
让 FormType 根据同级表单类型的值动态设置自己的选项的模式是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。