vendor/simpledot/cms-bundle/AWCmsBundle/EventListener/ResponseListener.php line 48

Open in your IDE?
  1. <?php
  2. namespace AWCmsBundle\EventListener;
  3. use AWCmsBundle\Manager\RedirectionManager;
  4. use AWCmsBundle\Manager\SiteManager;
  5. use AWCmsBundle\Manager\SlugManager;
  6. use AWCmsBundle\Service\ElasticSearchHandler;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\Session\Session;
  11. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  12. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  13. use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
  14. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  15. use Symfony\Component\HttpKernel\Event\ViewEvent;
  16. /**
  17.  * Allow to change status code of response if status_code parameters is set
  18.  */
  19. class ResponseListener
  20. {
  21.     
  22.     private SessionInterface $session;
  23.     private ElasticSearchHandler $elasticSearchHandler;
  24.     private SiteManager $siteManager;
  25.     private SlugManager $slugManager;
  26.     private RedirectionManager $redirectionManager;
  27.     
  28.     public function __construct(
  29.         SessionInterface $session,
  30.         ElasticSearchHandler $elasticSearchHandler,
  31.         SiteManager $siteManager,
  32.         SlugManager $slugManager,
  33.         RedirectionManager $redirectionManager
  34.     )
  35.     {
  36.         $this->session $session;
  37.         $this->elasticSearchHandler $elasticSearchHandler;
  38.         $this->siteManager $siteManager;
  39.         $this->slugManager $slugManager;
  40.         $this->redirectionManager $redirectionManager;
  41.     }
  42.     
  43.     public function onKernelView(ViewEvent $event)
  44.     {
  45.         $request $event->getRequest();
  46.         $parameters $event->getControllerResult();
  47.         if (is_array($parameters) && isset($parameters['status_code']) and is_int($parameters['status_code'])) {
  48.             $request->attributes->set('status_code'$parameters['status_code']);
  49.         }
  50.     }
  51.     
  52.     
  53.     public function onKernelResponse(ResponseEvent $event)
  54.     {
  55.         $response $event->getResponse();
  56.         $request $event->getRequest();
  57.         
  58.         $this->setStatusCode($request$response);
  59.         $this->redirectFrom($event);
  60.         $this->addRequestId($response);
  61.     }
  62.     
  63.     protected function addRequestId(Response $response)
  64.     {
  65.         if ($this->elasticSearchHandler->getRequestId()) {
  66.             $response->headers->set('x-request-id'$this->elasticSearchHandler->getRequestId());
  67.         }
  68.     }
  69.     
  70.     protected function setStatusCode(Request $requestResponse $response): void
  71.     {
  72.         $statusCode $request->attributes->get('status_code');
  73.         if (!empty($statusCode)) {
  74.             $response->setStatusCode($statusCode);
  75.         }
  76.     }
  77.     
  78.     protected function redirectFrom(ResponseEvent $event)
  79.     {
  80.         $request $event->getRequest();
  81.         if ($request->query->has("redirect_form")) {
  82.             $response = new RedirectResponse($request->query->get("redirect_form"));
  83.             $event->setResponse($response);
  84.             if ($this->session->has('form_redirect_notice_success')) {
  85.                 $this->session->getFlashBag()->add('notice_success'$this->session->get('form_redirect_notice_success'));
  86.                 $this->session->remove('form_redirect_notice_success');
  87.             }
  88.         }
  89.     }
  90. }