vendor/bestit/commercetools-odm/src/RepositoryFactory.php line 66

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BestIt\CommercetoolsODM;
  4. use BestIt\CTAsyncPool\PoolAwareTrait;
  5. use BestIt\CTAsyncPool\PoolInterface;
  6. use BestIt\CommercetoolsODM\Filter\FilterManagerInterface;
  7. use BestIt\CommercetoolsODM\Helper\FilterManagerAwareTrait;
  8. use BestIt\CommercetoolsODM\Mapping\ClassMetadataInterface;
  9. use BestIt\CommercetoolsODM\Model\DefaultRepository;
  10. use Doctrine\Common\Persistence\ObjectRepository;
  11. use Psr\Log\LoggerAwareInterface;
  12. use Psr\Log\LoggerAwareTrait;
  13. use Psr\Log\NullLogger;
  14. /**
  15. * Factory to provide the system with repositories.
  16. *
  17. * @author lange <lange@bestit-online.de>
  18. * @package BestIt\CommercetoolsODM
  19. */
  20. class RepositoryFactory implements LoggerAwareInterface, RepositoryFactoryInterface
  21. {
  22. use FilterManagerAwareTrait;
  23. use LoggerAwareTrait;
  24. use PoolAwareTrait;
  25. /**
  26. * @var string The default repository for this factory.
  27. */
  28. public const DEFAULT_REPOSITORY = DefaultRepository::class;
  29. /**
  30. * @var ObjectRepository[] Loaded repos.
  31. */
  32. private $cachedRepos = [];
  33. /**
  34. * RepositoryFactory constructor.
  35. *
  36. * @param FilterManagerInterface $filterManager
  37. * @param PoolInterface|null $pool
  38. */
  39. public function __construct(FilterManagerInterface $filterManager, PoolInterface $pool = null)
  40. {
  41. $this->logger = new NullLogger();
  42. $this->setFilterManager($filterManager);
  43. if ($pool) {
  44. $this->setPool($pool);
  45. }
  46. }
  47. /**
  48. * Gets the repository for a class.
  49. *
  50. * @param DocumentManagerInterface $documentManager
  51. * @param string $className
  52. *
  53. * @return ObjectRepository
  54. */
  55. #[\Override]
  56. public function getRepository(DocumentManagerInterface $documentManager, string $className): ObjectRepository
  57. {
  58. if (!@$this->cachedRepos[$className]) {
  59. $metadata = $documentManager->getClassMetadata($className);
  60. $repository = static::DEFAULT_REPOSITORY;
  61. if (($metadata instanceof ClassMetadataInterface) && ($tmp = $metadata->getRepository())) {
  62. $repository = $tmp;
  63. }
  64. $this->cachedRepos[$className] = $repository = new $repository(
  65. $metadata,
  66. $documentManager,
  67. $documentManager->getQueryHelper(),
  68. $this->getFilterManager(),
  69. $this->getPool()
  70. );
  71. if ($repository instanceof LoggerAwareInterface) {
  72. $repository->setLogger($this->logger);
  73. }
  74. }
  75. return $this->cachedRepos[$className];
  76. }
  77. }