Распространение событий в дочерних формах Symfony2

У меня есть две сущности. Объект A является родителем объекта B. Я создаю REST для объекта A, который содержит объект B в качестве дочернего элемента.

class EntityA {
private $name;
private $type;

private $bs;
}

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

Я в основном делаю пост / ставлю что-то вроде:

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

Для важной части форма сущности А выглядит примерно так:

/**
* @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

3

Решение

У меня был тот же вопрос, что и у вас, и с помощью небольшого количества тестов я нашел ответ, поэтому я отвечаю здесь, на случай, если кто-то еще найдет его здесь: ЯВЛЯЕТСЯ распространение событий для событий дочерней формы.

Точный жизненный цикл:

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

Что касается вашей проблемы, я предполагаю, что это вызвано тем фактом, что вы не используете непосредственно форму EntityB в форме EntityA, а CollectionType типа формы EntityB, и кажется, что CollectionType не отправляет события SUBMIT для каждого из его дочерних элементов естественным образом. ,

Надеюсь, это кому-нибудь поможет!

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]