<?php
namespace App\EventSubscriber;
use App\Event\OrderRequestEvent;
use App\Service\OrderRequestNumberGenerator;
use App\Service\OrderRequestService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderRequestEventSubscriber implements EventSubscriberInterface
{
/**
* @var OrderRequestService
*/
private $service;
/**
* @var OrderRequestNumberGenerator
*/
private $numberGenerator;
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* OrderRequestEventSubscriber constructor.
*
* @param OrderRequestService $service
* @param OrderRequestNumberGenerator $numberGenerator
* @param EntityManagerInterface $entityManager
*/
public function __construct(OrderRequestService $service, OrderRequestNumberGenerator $numberGenerator, EntityManagerInterface $entityManager)
{
$this->service = $service;
$this->numberGenerator = $numberGenerator;
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents()
{
return [
OrderRequestEvent::MODIFY => 'onModify',
OrderRequestEvent::CREATE => 'onCreate',
OrderRequestEvent::DELETE => 'onDelete',
];
}
public function onModify(OrderRequestEvent $event)
{
$this->service->onModification($event);
}
public function onDelete(OrderRequestEvent $event)
{
$this->service->onSoftDelete($event);
}
public function onCreate(OrderRequestEvent $event)
{
$orderRequest = $event->getOrderRequest();
$orderRequest->setArticleNumber($this->numberGenerator->generate());
$this->entityManager->flush();
}
}