Нет описания

EntityManagerFactory.php 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace MailPoet\Doctrine;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Doctrine\EventListeners\EmojiEncodingListener;
  5. use MailPoet\Doctrine\EventListeners\LastSubscribedAtListener;
  6. use MailPoet\Doctrine\EventListeners\TimestampListener;
  7. use MailPoet\Doctrine\EventListeners\ValidationListener;
  8. use MailPoet\Tracy\DoctrinePanel\DoctrinePanel;
  9. use MailPoetVendor\Doctrine\DBAL\Connection;
  10. use MailPoetVendor\Doctrine\ORM\Configuration;
  11. use MailPoetVendor\Doctrine\ORM\EntityManager;
  12. use MailPoetVendor\Doctrine\ORM\Events;
  13. use Tracy\Debugger;
  14. class EntityManagerFactory {
  15. /** @var Connection */
  16. private $connection;
  17. /** @var Configuration */
  18. private $configuration;
  19. /** @var TimestampListener */
  20. private $timestampListener;
  21. /** @var ValidationListener */
  22. private $validationListener;
  23. /** @var EmojiEncodingListener */
  24. private $emojiEncodingListener;
  25. /** @var LastSubscribedAtListener */
  26. private $lastSubscribedAtListener;
  27. public function __construct(
  28. Connection $connection,
  29. Configuration $configuration,
  30. TimestampListener $timestampListener,
  31. ValidationListener $validationListener,
  32. EmojiEncodingListener $emojiEncodingListener,
  33. LastSubscribedAtListener $lastSubscribedAtListener
  34. ) {
  35. $this->connection = $connection;
  36. $this->configuration = $configuration;
  37. $this->timestampListener = $timestampListener;
  38. $this->validationListener = $validationListener;
  39. $this->emojiEncodingListener = $emojiEncodingListener;
  40. $this->lastSubscribedAtListener = $lastSubscribedAtListener;
  41. }
  42. public function createEntityManager(): EntityManager {
  43. $entityManager = EntityManager::create($this->connection, $this->configuration);
  44. $this->setupListeners($entityManager);
  45. if (
  46. class_exists(Debugger::class)
  47. && class_exists(DoctrinePanel::class)
  48. ) {
  49. DoctrinePanel::init($entityManager);
  50. }
  51. return $entityManager;
  52. }
  53. private function setupListeners(EntityManager $entityManager) {
  54. $entityManager->getEventManager()->addEventListener(
  55. [Events::prePersist, Events::preUpdate],
  56. $this->timestampListener
  57. );
  58. $entityManager->getEventManager()->addEventListener(
  59. [Events::onFlush],
  60. $this->validationListener
  61. );
  62. $entityManager->getEventManager()->addEventListener(
  63. [Events::prePersist, Events::preUpdate],
  64. $this->emojiEncodingListener
  65. );
  66. $entityManager->getEventManager()->addEventListener(
  67. [Events::prePersist, Events::preUpdate],
  68. $this->lastSubscribedAtListener
  69. );
  70. }
  71. }