【问题标题】:Symfony: Get parent object within child from formeventSymfony:从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 吗?还是我应该以不同的方式进行? 谢谢。

【问题讨论】:

    标签: symfony event-listener dynamic-forms


    【解决方案1】:

    我不完全确定这是否是你想要的,但你应该看看这个答案:

    https://stackoverflow.com/a/25890150/17089665

    $form->all();

    $child->getName(); $form 变量,将会得到每个孩子的名字。

    【讨论】:

    • 重点是如何访问表格^^'。
    • $event->getForm() 不工作吗?
    • 没有原因,监听器在一个孩子('start')而不是表单上,所以 $event->getForm() 返回启动表单,如果你回到我的代码你会看到我试图通过使用 $event->getForm()->getParent() 到达父表单(即您所说的表单),但我得到了一个空数据,如您在图像中看到的那样
    • 你能发布一个 $event 的转储吗?
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2016-02-16
    • 2021-07-21
    • 2017-12-08
    相关资源
    最近更新 更多