Composition over inheritance et typage générique avec Symfony et Doctrine

Composition over inheritance et typage générique avec Symfony et Doctrine


Initialisation du projet

Pour commencer, initialisez un nouveau projet Symfony selon votre OS.

Pour moi (Ubuntu), ce sera comme cela :

$ symfony new codelabs-symfo-repo

À présent, installons les différentes librairies requises, en commençant par Doctrine.

$ composer require symfony/orm-pack

On installe le maker de Symfony pour aller plus vite :

$ composer require --dev symfony/maker-bundle

Enfin, installons PHPStan dès à présent pour plus tard.

$ composer require --dev phpstan/phpstan

Super, nous sommes à présent prêts à créer notre entité qui nous accompagnera tout le long de ce codelabs.

Faisons simple, et créons une entité Post avec un title et un content avec la commande :

$ bin/console make:entity

Super ! Comme vous le savez, cette commande a créé une nouvelle entité ainsi que son repository, respectivement dans les dossiers src/Entity et src/Repository. On remarque que notre repository étend par défaut le ServiceEntityRepository de Doctrine, qui contient toutes les méthodes :

/** * @extends ServiceEntityRepository<Post> * * @method Post|null find($id, $lockMode = null, $lockVersion = null) * @method Post|null findOneBy(array $criteria, array $orderBy = null) * @method Post[] findAll() * @method Post[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class PostRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Post::class); } // ...

Note

Notez au passage le tag ServiceEntityRepository<Post> qui est un avant-goût de ce que nous ferons plus tard avec le typage générique.

Comme on peut l'observer, notre repository est extrêmement couplé à Doctrine. Et de nombreuses méthodes que nous n'utiliserons jamais viennent polluer cette classe. Nous allons donc nettoyer et alléger notre repository dans la prochaine partie.

Auteur(s)

Arthur Jacquemin

Arthur Jacquemin

Développeur de contenu + ou - pertinent @ ElevenLabs_🚀

Voir le profil

Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !

Notre équipe d'experts répond à toutes vos questions.

Nous contacter

Découvrez nos autres contenus dans le même thème