Symfony:从formevent获取子对象中的父对象
Posted
技术标签:
【中文标题】Symfony:从formevent获取子对象中的父对象【英文标题】:Symfony: Get parent object within child from formevent 【发布时间】:2022-01-04 20:11:37 【问题描述】:我有一个包含 3 个字段(日期、类型事件、卖家)的表单,其中卖家是一个取决于 date 和 typeEvent 的选择类型,为此我遵循了the symfony documentation 用于动态表格。 但文档中的示例是关于一个仅依赖于另一个字段的字段。
到目前为止我做了什么:
$formModifier = function (FormInterface $form,DateTime $date = null, TypeEvent $type = null)
if (($date === null) || ($type === null)) $sellers = [];return;
$repo = $this->entityManager->getRepository(User::class);
$start = $date->format("Y-m-d H:i:s");
$end = new DateTime($date->format("Y-m-d H:i:s"));
$end = date_add($end,date_interval_create_from_date_string("60 minutes"))->format('Y-m-d H:i:s');
$organisation = $this->security->getUser()->getOrganisation();
$sellers = $repo->findSellers($organisation,$start,$end);
$form->add('seller', EntityType::class, [
'class' => User::class,
'placeholder' => '',
'choices' => $sellers,
'choice_label' => 'pseudo',
'attr' => ['class'=>'seller-select'],
'required'=>false,
'expanded' =>false,
]);
;
$builder->get('start')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier)
$start = $event->getForm()->getData();
$type = $event->getForm()->getParent()->getData()->getTypeEvent();
$formModifier($event->getForm()->getParent(), $start, $type);
);
$builder->get('typeEvent')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier)
$type = $event->getForm()->getData();
$start = $event->getForm()->getParent()->getData()->getStart();
$formModifier($event->getForm()->getParent(), $start, $type);
);
这里的问题是,例如,当我尝试将侦听器添加到其中的“开始”字段时,我无法访问其他字段,特别是 typeEvent 字段,我尝试了 $event->getForm ()->getParent()->getData()->getTypeEvent() 但它返回 null,这就是 $event->getForm() dumped.
你可以看到 $event->getForm()->getParent()->getData() 它就像一个新的 Event() ,所有属性都为空。 所以我的问题是:有什么方法可以在那里获取 typeEvent 吗?还是我应该以不同的方式进行? 谢谢。
【问题讨论】:
【参考方案1】:我不完全确定这是否是你想要的,但你应该看看这个答案:
https://***.com/a/25890150/17089665
$form->all();
$child->getName();
$form 变量,将会得到每个孩子的名字。
【讨论】:
重点是如何访问表格^^'。$event->getForm()
不工作吗?
没有原因,监听器在一个孩子('start')而不是表单上,所以 $event->getForm() 返回启动表单,如果你回到我的代码你会看到我试图通过使用 $event->getForm()->getParent() 到达父表单(即您所说的表单),但我得到了一个空数据,如您在图像中看到的那样
你能发布一个 $event 的转储吗?
ibb.co/6J23f1H以上是关于Symfony:从formevent获取子对象中的父对象的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 从 String 类声明中获取 className 对象