当我在 symfony 形式中寻找实体实例时闭包实例



在Symfony表单中,我必须添加一个实体的实例,但我不想在我的表单选择中添加这个实体的所有元组。当我使用ChoiceType::class时,出现此错误:

类型为"应用\实体\授权或空值"的预期参数, 在属性路径"授权"中给出的"关闭实例"。

这是我的表格:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$options=[];
$builder
->add('authorization', ChoiceType::class, [
'choices' => [
'Intervenant' => function(?AuthorizationRepository $authoRepo){
$result = $authoRepo->findOneBy(['name'=>'intervenant']);
return $result;
},
'Administrateur Structure' => function(?AuthorizationRepository $authoRepo) {
$result = $authoRepo->findOneBy(['name' => 'admin Structure']);
return $result;
}
],
'label' => 'Choisir le type de demande',
])
->add('structure', EntityType::class, ['class'=>Structure::class,
'choice_label'=>'completeName'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ValidationAuthorization::class,
]);
}

这是我的控制器:

public function authorization(Request $request, Users $user): Response
{
$valid = new ValidationAuthorization();
$formAutho = $this->createForm(AuthorizationType::class, $valid);
$formAutho->handleRequest($request);
if ($formAutho->isSubmitted() && $formAutho->isValid()) {
$valid->setIsValide(false);
$valid->setUser($user);
$this->entityManager->persist($valid);
$this->entityManager->flush();
$this->addFlash('success', 'Votre demande a été prise en compte');
return $this->redirectToRoute('users_index');
}
return $this->render('users/authorization.html.twig', [
'formAutho' => $formAutho->createView(),
'user' => $user,
]);
} 

看起来您应该使用EntityType而不是ChoiceType,而只是使用查询生成器来获取Authorization实体的子集。所以像这样:

$builder
->add('authorization', EntityType::class, [
'class' => Authorization::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('va')
->where('va.name IN ("intervenant", "admin Structure")')
->orderBy('va.name', 'DESC');
},
'label' => 'Choisir le type de demande',
])
->add('structure', EntityType::class, ['class'=>Structure::class,
'choice_label'=>'completeName'
]);

相关内容

最新更新