Déclarer les dépôts Doctrine en tant que services
Publié le 27/08/2019 • Actualisé le 17/02/2020
[Maj 19/02/202] Lisez mon article à ce sujet.
C'est était ma manière préférée de déclarer et d'utiliser les dépôts Doctrine. Ça permet de les injecter à n'importe quel endroit ou on en a besoin. De plus, on bénéficie de l'auto-complétion dans l'IDE (dans PhpStorm avec le plugin Symfony par exemple) puisque la classe du service est connue. Ce qui n'est pas le cas quand on utilise directement la fonction getRepository()
à l'intérieur d'un contrôleur.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use App\Repository\ArticleRepository;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*
* @property ArticleRepository $articleRepo
*/
trait Snippet40Trait
{
public function snippet40(): void
{
// In fact the article repository service is injected in the main controller constructor
$articles = $this->articleRepo->findArticlesForLang('en');
// We've got autocompletion on the ArticleRepository functions like "findArticlesForLang".
echo \sprintf('%d posts found! 📚', \count($articles));
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Plus sur le web Snippet aléatoire