Déclarer les dépôts Doctrine en tant que services

Publié le 27/08/2019 • Actualisé le 17/02/2020


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

[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

  Travaillez avec moi !