src/EventListener/PostValidate/PopupCampaignItemPostValidateTransformer.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use ApiPlatform\Core\Validator\ValidatorInterface;
  4. use App\DTO\PopupCampaignItem\PopupCampaignItem;
  5. use App\Entity\PopupCampaignItem as Entity;
  6. use App\Service\AfterReadStorage;
  7. use App\Service\Manager\PopupCampaignItemManager;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
  13. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  14. class PopupCampaignItemPostValidateTransformer implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var AfterReadStorage
  18.      */
  19.     private $afterReadStorage;
  20.     /**
  21.      * @var PopupCampaignItemManager
  22.      */
  23.     private $popupCampaignItemManager;
  24.     /**
  25.      * @var DenormalizerInterface
  26.      */
  27.     private $denormalizer;
  28.     /**
  29.      * @var ValidatorInterface
  30.      */
  31.     private $validator;
  32.     /**
  33.      * @var NormalizerInterface
  34.      */
  35.     private $normalizer;
  36.     public function __construct(
  37.         AfterReadStorage $afterReadStorage,
  38.         PopupCampaignItemManager $popupCampaignItemManager,
  39.         DenormalizerInterface $denormalizer,
  40.         ValidatorInterface $validator,
  41.         NormalizerInterface $normalizer
  42.     ) {
  43.         $this->afterReadStorage $afterReadStorage;
  44.         $this->popupCampaignItemManager $popupCampaignItemManager;
  45.         $this->denormalizer $denormalizer;
  46.         $this->validator $validator;
  47.         $this->normalizer $normalizer;
  48.     }
  49.     /**
  50.      * @return array
  51.      */
  52.     public static function getSubscribedEvents()
  53.     {
  54.         return [
  55.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  56.         ];
  57.     }
  58.     /**
  59.      * @param PopupCampaignItem $payload
  60.      *
  61.      * @return bool
  62.      */
  63.     public function supportTransformation($payload)
  64.     {
  65.         return $payload instanceof PopupCampaignItem;
  66.     }
  67.     /**
  68.      * @param ViewEvent $event
  69.      */
  70.     public function transform(ViewEvent $event)
  71.     {
  72.         /** @var PopupCampaignItem $payload */
  73.         $payload $event->getControllerResult();
  74.         if (!$this->supportTransformation($payload)) {
  75.             return;
  76.         }
  77.         $popupCampaignItem null;
  78.         if ($event->getRequest()->isMethod(Request::METHOD_PUT)) {
  79.             /** @var Entity $popupCampaignItem */
  80.             $popupCampaignItem $this->afterReadStorage->getObject();
  81.             if ($payload->data) {
  82.                 $data $this->denormalizer->denormalize(
  83.                     $payload->data,
  84.                     $this->popupCampaignItemManager->getDataType($popupCampaignItem)
  85.                 );
  86.                 $this->validator->validate($data);
  87.                 $popupCampaignItem->update((array) $data);
  88.             }
  89.             $this->popupCampaignItemManager->save($popupCampaignItem);
  90.         }
  91.         if (null !== $popupCampaignItem) {
  92.             $event->setResponse(new JsonResponse($this->normalizer->normalize($popupCampaignItem)));
  93.         }
  94.     }
  95. }