/** * @param FormBuilderInterface $builder * @param string $name * @param string $group */ private function addModelDataListener(FormBuilderInterface $builder, $name, $group) { $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($builder, $name, $group) { try { $data = $this->propertyAccessor->getValue($event->getData(), $name); } catch (\RuntimeException $exception) { $data = null; } if (null === $data || !is_object($data)) { return; } $formName = $this->dynamicFormsChildrenMap->getFormNameByGroupAndDataClass($group, get_class($data)); $options = $event->getForm()->get($name)->get('_form')->getConfig()->getOptions(); $event->getForm()->get($name)->add('_form', 'choice', array_merge($options, ['data' => $formName])); $this->addEmbeddedFormField($builder->get($name), $event->getForm()->get($name), $formName); }); }