Embed Form和EntityType以在Embed Form中选择关联的实体



我有一个小问题,找不到解决方案,我不得不错过一个步骤或方法,这是上下文:

我有一个与机构相关的注册实体(注册与单个机构相关(

在我的表格中,第一个字段允许我选择带有选择的机构,然后是链接到该机构的其他字段,例如是否参与,但已显示:

以下是它的样子:

Establishment: <select>
Participates: Yes / No
AdditionalInfo: Textarea

因此,有了这份表格,我希望在提交过程中恢复所选机构的注册实体,以及机构中具有正确值的字段

我尝试在RegistrationType中输入:

$builder
->add('establishment', EstablishmentType::class)
;

机构类型:

$builder
->add('id', EntityType::class, [
'class' => Establishment::class,
'choice_label' => 'name',
'query_builder' => function (EstablishmentRepository $repository) {
return $repository->findAllQueryBuilder($user);
},
])
->add('participate', ChoiceType::class, [
'expanded' => true,
'multiple' => false,
'choices' => [
'front.form.establishment.participate.yes' => true,
'front.form.establishment.participate.no' => false,
],
])
->add('comment', TextAreaType::class)
;

但毫无疑问,这是行不通的,他试图建立一个建制派,而不是建制派的本我,这是相当合乎逻辑的。。。

你对此有什么想法吗?RegistrationType中允许您正确映射机构的未映射字段?还有其他想法吗?需要更多信息吗?

我找到了一个问题的解决方案,我无法使用DataTransformer,因为我的实体被覆盖了,所以我添加了一个PreSubmit侦听器,用从DB中恢复的正确实体来设置我的建立。

以下是在RegistrationType:中添加的侦听器

/** @var EntityManagerInterface $em */
$em = $this->entityManager;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (PreSubmitEvent $event) use ($em) {
$data = $event->getData();
$id = isset($data['establishment']) && isset($data['establishment']['id']) ? $data['establishment']['id'] : null ;
if(!empty($id)){
$establishment = $em->getRepository(Establishment::class)->find($id);
$event->getForm()->get('establishment')->setData($establishment);
}
});

当然,对代码或其他方法还有改进,无论如何,这个方法刚刚解锁了我!

最新更新