Bonjour à tous,

J'ai besoin de votre aide pour utiliser un repository dans un service, j'ai cherché dans tous les sens, je ne trouve que des infos pas claires sur d'anciennes versions.
Je cherche à faire au plus simple, d'après ce que je vois, avec Symfony 5.4, on n'a plus besoin de modifier config.yaml

J'ai une entité Prestation, qui contient quelques champs : nom, priorité...

En mettant ma requête directement dans mon service, que j'appelle à partir de mon controller, ça marche nickel :

Service : AlimenterPrestations.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class AlimenterPrestations
{
    private $entitymanager;
    protected $request_stack;
 
    public function __construct(EntityManagerInterface $entitymanager, RequestStack $request_stack)
    {
        $this->entitymanager = $entitymanager;
        $this->request = $request_stack->getCurrentRequest();
    }
 
    public function alimenterPrestationsCreation()
    {
        // afficher la liste des prestations
        $qb = $this->entitymanager->createQueryBuilder();
        $qb->select(array('pr'))
            ->from('App:Prestation', 'pr')
            ->orderBy('pr.priorite', 'ASC');
 
        $q = $qb->getQuery();
 
        $liste_prestation = $q->getResult();
        //...
    }
}
Maintenant je veux factoriser mon code et mettre toutes les requêtes dans PrestationRepository.

Repository : PrestationRepository.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class PrestationRepository extends ServiceEntityRepository
{
    private $params;
    private $paginator;
 
    public function __construct(ParameterBagInterface $params, ManagerRegistry $registry, PaginatorInterface $paginator)
    {
        $this->params = $params;
        $this->paginator = $paginator;
        parent::__construct($registry, Prestation::class);
    }
 
    public function SelectPrestationsListePriorite(): array
    {
        $queryBuilder = $this->createQueryBuilder('prestation')
            ->orderBy('prestation.priorite', 'ASC');
 
        $query = $queryBuilder->getQuery();
 
        return $query->getResult();
    }
}
Et je modifie mon service comme suit :

Service : AlimenterPrestations.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AlimenterPrestations
{
    private $entitymanager;
    protected $request_stack;
 
    public function __construct(EntityManagerInterface $entitymanager, RequestStack $request_stack)
    {
        $this->entitymanager = $entitymanager;
        $this->request = $request_stack->getCurrentRequest();
    }
 
    public function alimenterPrestationsCreation()
    {
        $liste_prestation = $this->entitymanager->getRepository(Prestation::class)->SelectPrestationsListePriorite();
        //...
}
Et là, j'ai l'erreur :
Undefined method "SelectPrestationsListePriorite". The method name must start with either findBy, findOneBy or countBy!
On ne peut pas donner le nom qu'on veut aux fonctions ?
Et je ne peux pas juste faire un findAll avec un tri ? Je ne vois pas où ça cloche...

Merci d'avance pour votre aide !