Я пытаюсь создать форму, которая сопоставляется с сущностью типа «Участник».Участник находится в личных отношениях с «человеком».Добавляя участника, я хочу сначала дать возможность выбрать человека, уже находящегося в базе данных, и, если нужного не существует, создать этого человека с помощью формы участника.
Это работает, если я делаю это сдве страницы / формы.Первый пытается выбрать существующего человека, в противном случае откройте новую страницу с другой формой.Первая страница:
$form->add('person', AjaxEntityType, [ // EntityType but with select2 ajax
'class' => Person::class,
'remote_route' => 'person_ajax_list'
]);
Вторая страница:
$participant->setPerson(new Person());
$form->add('person', PersonType::class);
// adds PersonType fields to the Participant form
Хорошо, это работает, но это очень медленно и не нужно.Я бы предпочел иметь ОБА из них, где поля формы PersonType (имя, фамилия, название, компания, адрес и т. Д.) Автоматически заполняются данными о людях, если они выбраны.В противном случае, если не выбрано ни одного сотрудника, а форма отправлена с введенными данными, необходимо создать и сохранить нового сотрудника в базе данных.
К сожалению, невозможно дважды отобразить «лицо», один раз в виде раскрывающегося списка.и один раз как форма PersonType.Итак, как мне добиться того, чего я хочу, без сюрреалистического количества JavaScript?
Моим текущим решением было бы вручную создать все необходимые поля с помощью JavaScript и заполнить их данными о персонале, которые я получу с помощью другогоAjax-запрос на событие onchange раскрывающегося лица, затем в событии PRE_SUBMIT формы удалите поле person и добавьте его снова в качестве поля PersonType, проверьте, соответствуют ли введенные данные существующему человеку или новому, итогда действуй соответственно.Должно быть лучшее решение, верно?
События форм, к сожалению, оказались в большинстве случаев бессмысленными, поскольку невозможно прикрепить прослушиватель событий к событию 'change' в одном из полей.
Спасибо.