У меня есть форма, которая проходит в несколько этапов, в том числе:
Шаг 1: простая форма, основанная на сущности 1, которая записывает первую часть набора данных.
Шаг 2: родительская форма (на основе сущности 1 на шаге 1), которая реализует дочернюю форму (на основе сущности 2) => CollectionType. Родительская форма ($ builder) содержит данные из шага 1, но не дочернюю форму.
Моя задача проста: моя дочерняя форма содержит ChoiceType, который должен варьироваться в зависимости от заданного
Моя проблема: передать дочерней форме фрагмент данных, который есть у родительской формы ($ builder-> getData ()), чтобы установить условие опции для моего ChoiceType.
Я искал решения, но не нашел никакого результата. Поэтому я думаю, что моя проблема не в ошибке, а в плохом подходе с моей стороны.
Я проверял:
//PARENT
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('wans', CollectionType::class,
[
'entry_type' => WanDType::class,
'entry_options' => [
'label' => false,
'data' => $builder->getData() // <- here
],
]);
}
//ENFANT
public function buildForm(FormBuilderInterface $builder, array $options)
{
$ma_valeur = $builder->getData()->getValue(); //<- here
if(in_array($ma_valeur, ['1'])) { //<- here
$builder->add('profil', ChoiceType::class, [
'choices' => [
[...]
],
'label' => false,
]);
} else { //<- here
$builder->add('profil', ChoiceType::class, [
'choices' => [
[...]
],
'label' => false,
]);
} //<- here
}
=> Я получаю сообщение об ошибке, объясняющее, что мой класс data_class не соответствует моей дочерней форме. Фактически, data_class родительской формы заменил данные дочерней формы. Ошибка предлагает дать ему нулевое значение, но это вызывает другие ошибки, и Symfony все меньше и меньше радует (логично, на мой взгляд, это не очень хорошая практика).
=> Я пытался использовать опции $. Symfony не счастлив, потому что он отказывается добавлять записи key => значения, которые он не знает в начале координат.
=> Я думал о том, чтобы сделать свое состояние в родительской форме. Но с течением времени состояние может меняться, поэтому, по моему мнению, создание детской формы по типу условий не является хорошей практикой.
=> Я также думал о создании этого поля непосредственно в представлении. Но это также не оптимально в соответствии с эволюцией.
=> Я проверил несколько вещей, которые здесь бесполезно упоминать, каждый раз получая отрицательный результат.
Я сильно сомневаюсь, что SensioLabs не думал о подобных вещах. Мне, наверное, не нужно быть далеко, если кто-нибудь знает, как объяснить, это было бы замечательно.
Спасибо за вашу помощь:)
=============================================== =====
РЕДАКТИРОВАТЬ тест 1
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
dump($event->getForm()->getParent()->getData());
die('ok');
});
die('ok2');
}