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
Maintenant je veux factoriser mon code et mettre toutes les requêtes dans PrestationRepository.
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(); //... } }
Repository : PrestationRepository.php
Et je modifie mon service comme suit :
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(); } }
Service : AlimenterPrestations.php
Et là, j'ai l'erreur :
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(); //... }
On ne peut pas donner le nom qu'on veut aux fonctions ?Undefined method "SelectPrestationsListePriorite". The method name must start with either findBy, findOneBy or countBy!
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 !
Partager