Via G. Falcone 5, Pollenza (MC), Italy
+39 0733 203595

Symfony: Autowire dei repository Doctrine (Repositories as Service)

Con la versione 3.3, Symfony ha introdotto l’autowrire e l’autoconfigure dei servizi, risparmiando a noi developer parecchio lavoro “noioso”.

Spesso capita di dovere iniettare un repository Doctrine: out of the box non è possibile farlo. Di default infatti i repository non sono dichiarati come servizi e non sono quindi utilizzabili con l’autowire.

Per risolvere il problema bastano due semplici modifiche:

  • Il repository deve estendere la classe “Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository”
  • Nel costruttore del repository bisogna richiamare il parent passandogli l’entity di riferimento: parent::__construct($registry, Foo::class);

Ad esempio, il repository FooRepository dell’entity Foo andrebbe quindi dichiarato così:

Con questa modifica possiamo quindi iniettare il repository all’interno di un servizio o di un controller:

Leave a reply


This site uses Akismet to reduce spam. Learn how your comment data is processed.