src/Hitso/Bundle/ContentBundle/EventListener/ContentSubscriber.php line 60

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hitso\Bundle\ContentBundle\EventListener;
  4. use Faker\Factory;
  5. use Hitso\Bundle\CommonBundle\Doctrine\Event\EntityEvent;
  6. use Hitso\Bundle\ContentBundle\Entity\Content;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Hitso\Bundle\SearchBundle\Manager\SearchManager;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. class ContentSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * @var SearchManager
  14.      */
  15.     private $searchManager;
  16.     public function __construct(SearchManager $searchManager)
  17.     {
  18.         $this->searchManager $searchManager;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             'content.pre_create'  => 'onPreCreate',
  24.             'content.post_create' => 'onPostCreate',
  25.             'content.post_update' => 'onPostUpdate',
  26.         ];
  27.     }
  28.     public function onPreCreate(EntityEvent $event): void
  29.     {
  30.         $content $event->getEntity();
  31.         if ($content instanceof Content) {
  32.             if ('' === (string) $content->getSlug()) {
  33.                 $content->setSlug(Factory::create()->uuid);
  34.             }
  35.         }
  36.     }
  37.     public function onPostCreate(EntityEvent $event): void
  38.     {
  39.         $entity $event->getEntity();
  40.         if ($entity instanceof Content) {
  41.             try {
  42.                 $type      $this->searchManager->getType('content');
  43.                 $documents = new ArrayCollection();
  44.                 $document  $type->createDocument($entity);
  45.                 $documents->add($document);
  46.                 $this->searchManager->addDocuments($documents$type->getName());
  47.             } catch (\Exception $e) {
  48.             }
  49.         }
  50.     }
  51.     public function onPostUpdate(EntityEvent $event): void
  52.     {
  53.         $entity $event->getEntity();
  54.         if ($entity instanceof Content) {
  55.             try {
  56.                 $type     $this->searchManager->getType('content');
  57.                 $document $type->createDocument($entity);
  58.                 $this->searchManager->updateDocument($document);
  59.             } catch (\Exception $e) {
  60.             }
  61.         }
  62.     }
  63. }