Forms 来自数据库的非映射字段的Symfony表单集值

Forms 来自数据库的非映射字段的Symfony表单集值,forms,symfony,Forms,Symfony,我的表单中有一个TextType标签字段,我的实体是EAV, 结构如下: 身份证件 targetId, entityTargetName 在我的表单中,我有一个未映射的字段标签来自数据库的动态,在呈现我的表单时,我必须使用targetId和entityTargetName向数据库发送查询,并获取标签字段的值,并将其设置为表单 我知道我可以做查询生成器,但我的字段不是select,而是TexType ->add('productName ', TextType::class,

我的表单中有一个TextType标签字段,我的实体是EAV, 结构如下: 身份证件 targetId, entityTargetName

在我的表单中,我有一个未映射的字段标签来自数据库的动态,在呈现我的表单时,我必须使用targetId和entityTargetName向数据库发送查询,并获取标签字段的值,并将其设置为表单

我知道我可以做查询生成器,但我的字段不是select,而是TexType

        ->add('productName ', TextType::class,
            array(
                'mapped'=>false,
            )
        )

有什么想法吗

您不仅可以为EntityType字段注入实体存储库

您可以执行以下操作: 1.以这种方式(或类似方式)在控制器中创建表单:

二,。将configureOptions方法添加到MyFormType类:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class'    => MyModelClass::class,
        'entityManager' => null, // This is important
    ]);
}
三,。在buildForm方法中以这种方式使用实体管理器,并将其传递给默认值:

$options['entityManager']->getRepository(ProductRepository::class)->getProductName(targetId, entityTargetName);

希望这有帮助

谢谢a_sarana,但是如何获取targetId和entityTargetName,我的表单是collection@spinoza,也许你应该使用表单事件?请看。您可能需要使用FormEvents::PRE_SET_DATA event。@实际上,在我看来,FormEvents更适合这样做。
$options['entityManager']->getRepository(ProductRepository::class)->getProductName(targetId, entityTargetName);