Symfony:从formevent获取子对象中的父对象

Posted

技术标签:

【中文标题】Symfony:从formevent获取子对象中的父对象【英文标题】:Symfony: Get parent object within child from formevent 【发布时间】:2022-01-04 20:11:37 【问题描述】:

我有一个包含 3 个字段(日期、类型事件、卖家)的表单,其中卖家是一个取决于 datetypeEvent 的选择类型,为此我遵循了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 对象

如何从子表单中获取父 Symfony3 表单的值?

传递 formevent 和 index React Typescript

symfony 中的子查询

表单以“null”提交,但提交后将成为对象

如何从 Symfony 中的 url 获取 id [重复]