src/Shop/Workflow/ProductSubscriber.php line 25

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Shop\Workflow;
  4. use App\Shop\Doctrine\Entity\Product;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Workflow\Event\Event;
  7. use Symfony\Component\Workflow\Event\GuardEvent;
  8. final class ProductSubscriber implements EventSubscriberInterface
  9. {
  10.     /**
  11.      * {@inheritdoc}
  12.      */
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             'workflow.product.completed' => ['onCompleted'],
  17.             'workflow.product.guard.publish' => ['guardPublish'],
  18.         ];
  19.     }
  20.     public function guardPublish(GuardEvent $event): void
  21.     {
  22.         /** @var Product $product */
  23.         $product $event->getSubject();
  24.         if (null === $product->getBrand() || null === $product->getTaxonomy() || null === $product->getCurrentPrice()) {
  25.             $event->setBlocked(true);
  26.         }
  27.     }
  28.     public function onCompleted(Event $event): void
  29.     {
  30.         /** @var Product $product */
  31.         $product $event->getSubject();
  32.         $product->addStateHistory($product->getState());
  33.     }
  34. }