src/EventListener/PostValidate/CreateSiteStatusPostValidateTransformer.php line 57

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\DTO\SiteStatus\SiteStatus;
  4. use App\Entity\Site;
  5. use App\Entity\SiteStatus as Entity;
  6. use App\Repository\SiteRepository;
  7. use App\Service\AfterReadStorage;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. class CreateSiteStatusPostValidateTransformer implements EventSubscriberInterface
  13. {
  14.     private $request;
  15.     private $afterReadStorage;
  16.     private $siteRepository;
  17.     public function __construct(
  18.         RequestStack $requestStack,
  19.         AfterReadStorage $afterReadStorage,
  20.         SiteRepository $siteRepository
  21.     )
  22.     {
  23.         $this->request $requestStack->getCurrentRequest();
  24.         $this->afterReadStorage $afterReadStorage;
  25.         $this->siteRepository $siteRepository;
  26.     }
  27.     /**
  28.      * @return array
  29.      */
  30.     public static function getSubscribedEvents()
  31.     {
  32.         return [
  33.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  34.         ];
  35.     }
  36.     /**
  37.      * @param SiteStatus $payload
  38.      *
  39.      * @return bool
  40.      */
  41.     public function supportTransformation($payload)
  42.     {
  43.         return $payload instanceof SiteStatus;
  44.     }
  45.     /**
  46.      * @param ViewEvent $event
  47.      */
  48.     public function transform(ViewEvent $event)
  49.     {
  50.         /** @var SiteStatus $payload */
  51.         $payload $event->getControllerResult();
  52.         if (!$this->supportTransformation($payload)) {
  53.             return;
  54.         }
  55.         /** @var Site $site */
  56.         $site $this->siteRepository->find($this->request->get('id'));
  57.         if ($event->getRequest()->isMethod(Request::METHOD_PUT)) {
  58.             /** @var Entity $siteStatus */
  59.             $siteStatus $this->afterReadStorage->getObject();
  60.             $siteStatus->update($payload->name);
  61.             $event->setControllerResult($siteStatus);
  62.         } elseif ($event->getRequest()->isMethod(Request::METHOD_POST)) {
  63.             $siteStatus Entity::create($site$payload->name);
  64.             $event->setControllerResult($siteStatus);
  65.         }
  66.     }
  67. }