首页 > 解决方案 > Symfony 5 中的 FormType 在此上下文中不允许使用“App\Entity\User”类型的表达式

问题描述

我正在尝试以一种形式过滤属于登录用户的收件人。

当我尝试使用登录用户过滤我的 Destinataire 表时出现上述错误。

Expression of type 'App\Entity\User' not allowed in this context

Utilisateur 是我的 Destinataire 实体的一个字段。我的表格:

<?php

namespace App\Form;

use App\Entity\Courrier;
use App\Entity\Destinataire;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;

class CourrierType extends AbstractType
{
  private $security;

  public function __construct(Security $security)
  {
    $this->security = $security;
  }

  public function buildForm(FormBuilderInterface $builder, array $options): void
  {
    $builder
        ->add('objet')
        ->add('destinataire', EntityType::class, [
            'class' => Destinataire::class,
            'placeholder' => '--Choisissez un destinataire--',
            'query_builder' => function (EntityRepository $er) 
            {
                $user = $this->security->getUser();
                return $er->createQueryBuilder('qb')
                    ->where('utilisateur', $user)
                    ->addOrderBy('qb.denomination', 'ASC')
                    ->addOrderBy('qb.prenom', 'ASC')
                    ->addOrderBy('qb.nom', 'ASC');
            },
        ])           
        ->add('dateEnvoi')
        ->add('dateRelance')
        ->add('statut')
        ->add('offreReference')
        ->add('nosReferences')
        ->add('vosReferences')
        ->add('annonceCopie')
        ->add('paragraphe1')
        ->add('paragraphe2')
        ->add('paragraphe3')
        ->add('paragraphe4')  
    ;
  }

  public function configureOptions(OptionsResolver $resolver): void
  {
    $resolver->setDefaults([
        'data_class' => Courrier::class,
    ]);
  }
}

错误在线:

->where('utilisateur', $user)

标签: phpsymfonydqlsymfony5

解决方案


替换此行->where('qb.utilisateur = :user')->setParameter('user', $user)

有关更多信息,请阅读此文档Doctrine Binding Parameters


推荐阅读