1 <?php 
declare(strict_types
=1); 
   4  * This file is part of the Rapsys TreeBundle package. 
   6  * (c) Raphaël Gertz <symfony@rapsys.eu> 
   8  * For the full copyright and license information, please view the LICENSE 
   9  * file that was distributed with this source code. 
  12 namespace Rapsys\TreeBundle
; 
  14 use Doctrine\ORM\EntityManagerInterface
; 
  15 use Doctrine\ORM\Repository\RepositoryFactory
; 
  16 use Doctrine\Persistence\ObjectRepository
; 
  18 use Psr\Container\ContainerInterface
; 
  20 use Rapsys\PackBundle\Util\SluggerUtil
; 
  21 use Rapsys\UserBundle\Factory 
as BaseFactory
; 
  23 use Symfony\Component\HttpFoundation\RequestStack
; 
  24 use Symfony\Component\Routing\RouterInterface
; 
  25 use Symfony\Contracts\Translation\TranslatorInterface
; 
  28  * This factory is used to create default repository objects for entities at runtime. 
  30 final class Factory 
extends BaseFactory 
{ 
  32          * Initializes a new RepositoryFactory instance 
  34          * @param ContainerInterface $container The container instance 
  35          * @param RequestStack $request The request stack 
  36          * @param RouterInterface $router The router instance 
  37          * @param SluggerUtil $slugger The SluggerUtil instance 
  38          * @param TranslatorInterface $translator The TranslatorInterface instance 
  39          * @param string $locale The current locale 
  40          * @param array $languages The languages list 
  42         public function __construct(private ContainerInterface 
$container, private RequestStack 
$request, private RouterInterface 
$router, private SluggerUtil 
$slugger, private TranslatorInterface 
$translator, private string $locale, private array $languages) { 
  46          * Create a new repository instance for an entity class 
  48          * @param EntityManagerInterface $entityManager The EntityManager instance. 
  49          * @param string $entityName The name of the entity. 
  51         protected function createRepository(EntityManagerInterface 
$entityManager, string $entityName): ObjectRepository 
{ 
  53                 $metadata = $entityManager->getClassMetadata($entityName); 
  55                 //Get repository class 
  56                 $repositoryClass = $metadata->customRepositoryClassName 
?: $entityManager->getConfiguration()->getDefaultRepositoryClassName(); 
  58                 //Set to current locale 
  59                 //XXX: current request is not yet populated in constructor 
  60                 $this->locale 
= $this->request
->getCurrentRequest()?->getLocale() ?? $this->locale
; 
  62                 //Return repository class instance 
  63                 //XXX: router, slugger, translator, languages and locale arguments will be ignored by default 
  64                 return new $repositoryClass($entityManager, $metadata, $this->container
, $this->router
, $this->slugger
, $this->translator
, $this->locale
, $this->languages
);