src/EventListener/PostValidate/CreateSiteSearchQueryPostValidateTransformation.php line 56

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\PostValidate;
  3. use App\Entity\SearchQuery;
  4. use App\Entity\SearchQueryParameter;
  5. use App\Entity\SearchQueryType;
  6. use App\Entity\Site;
  7. use App\Service\AfterReadStorage;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use \App\DTO\SiteSearchQuery\SiteSearchQuery as DTO;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpKernel\Event\ViewEvent;
  13. use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
  14. class CreateSiteSearchQueryPostValidateTransformation implements EventSubscriberInterface
  15. {
  16.     private $entityManager;
  17.     private $normalizer;
  18.     private $afterReadStorage;
  19.     public function __construct(
  20.         EntityManagerInterface $entityManager,
  21.         NormalizerInterface $normalizer,
  22.         AfterReadStorage $afterReadStorage
  23.     ) {
  24.         $this->entityManager $entityManager;
  25.         $this->normalizer $normalizer;
  26.         $this->afterReadStorage $afterReadStorage;
  27.     }
  28.     /**
  29.      * @return array
  30.      */
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             PostValidateListener::POST_VALIDATE_TRANSFORMATION => 'transform',
  35.         ];
  36.     }
  37.     /**
  38.      * @param DTO $payload
  39.      */
  40.     public function supportTransformation($payload)
  41.     {
  42.         return $payload instanceof DTO;
  43.     }
  44.     /**
  45.      * @param ViewEvent $event
  46.      */
  47.     public function transform(ViewEvent $event)
  48.     {
  49.         /** @var DTO $payload */
  50.         $payload $event->getControllerResult();
  51.         if (!$this->supportTransformation($payload)) {
  52.             return;
  53.         }
  54.         /** @var SearchQueryType $searchQueryType */
  55.         $searchQueryType $this->entityManager->getRepository(SearchQueryType::class)->find($payload->searchQueryType);
  56.         /** @var Request $request */
  57.         $request $event->getRequest();
  58.         /** @var Site $site */
  59.         $site $this->entityManager->getRepository(Site::class)->find($request->get('id'));
  60.         if ($request->isMethod($request::METHOD_PUT)) {
  61.             /** @var SearchQuery $searchQuery */
  62.             $searchQuery $this->afterReadStorage->getObject();
  63.             $searchQuery->update($payload->name$searchQueryType);
  64.             $searchQuery->resetRelations();
  65.         } else {
  66.             $searchQuery SearchQuery::create($payload->name$site$searchQueryType);
  67.         }
  68.         foreach ($payload->searchQueryParameters as $searchQueryParameter) {
  69.             SearchQueryParameter::create(
  70.                 $searchQuery,
  71.                 $searchQueryParameter->parameter,
  72.                 $searchQueryParameter->value
  73.             );
  74.         }
  75.         $event->setControllerResult($searchQuery);
  76.     }
  77. }