gpt4 book ai didi

php - Symfony2 子表单事件传播

转载 作者:可可西里 更新时间:2023-11-01 00:58:03 25 4
gpt4 key购买 nike

我有两个实体。实体 A 是实体 B 的父实体。我正在为包含实体 B 作为子实体的实体 A 创建 REST。

class EntityA {
private $name;
private $type;

private $bs;
}

class EntityB {
private $entityA;
private $color;
}

我基本上做一个 post/put 类似的东西:

{ "name": "anamehere", "type": "atypehere", "bs": [{"color": "blue"}] }

对于重要的部分,实体 A 的形式看起来像这样:

/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('type', TextType::class)
->add('bs', CollectionType::class, array(
'entry_type' => EntityB::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
));

$builder->addEventListener(FormEvents::SUBMIT, array($this, 'onSubmitData'));

}

public function onSubmitData(FormEvent $event) {
// Do Something
}

我的实体 B 的表单看起来像这样:

/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('color', TextType::class);

$builder->addEventListener(FormEvents::SUBMIT, array($this, 'onSubmitData'));

}

public function onSubmitData(FormEvent $event) {
// Do Something else
}

我遇到的问题是,当我执行 POST/PUT 时,实体 B 表单事件 onSubmitData 没有被调用。如何将事件从 EntityA 表单传播到 EntityB 表单。它在 EntityAType 中正常工作

最佳答案

我和你有同样的问题,通过一些测试我找到了答案,所以我在这里回答,以防其他人在这里找到他的方式:There IS event propagation用于子表单事件。

确切的生命周期是:

Parent PRE_SUBMIT
Child PRE_SUBMIT
GrandChild PRE_SUBMIT
GrandChild SUBMIT
GrandChild POST_SUBMIT
Child SUBMIT
Child POST_SUBMIT
Parent SUBMIT
Parent POST_SUBMIT

关于你的问题,我的猜测是因为你没有直接在EntityA的表单中使用EntityB的表单,而是使用EntityB的表单类型的CollectionType,而且似乎CollectionType不会自然地为每个发送SUBMIT事件为了它的 child 。

希望这对任何人都有帮助!

关于php - Symfony2 子表单事件传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com