<?php
declare(strict_types=1);
namespace App\Shop\Workflow;
use App\Shop\Doctrine\Entity\Product;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
use Symfony\Component\Workflow\Event\GuardEvent;
final class ProductSubscriber implements EventSubscriberInterface
{
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents(): array
{
return [
'workflow.product.completed' => ['onCompleted'],
'workflow.product.guard.publish' => ['guardPublish'],
];
}
public function guardPublish(GuardEvent $event): void
{
/** @var Product $product */
$product = $event->getSubject();
if (null === $product->getBrand() || null === $product->getTaxonomy() || null === $product->getCurrentPrice()) {
$event->setBlocked(true);
}
}
public function onCompleted(Event $event): void
{
/** @var Product $product */
$product = $event->getSubject();
$product->addStateHistory($product->getState());
}
}