vendor/contao/core-bundle/src/EventListener/BackendPreviewRedirectListener.php line 34

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * This file is part of Contao.
  5.  *
  6.  * (c) Leo Feyer
  7.  *
  8.  * @license LGPL-3.0-or-later
  9.  */
  10. namespace Contao\CoreBundle\EventListener;
  11. use Contao\CoreBundle\Routing\ScopeMatcher;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpKernel\Event\RequestEvent;
  14. /**
  15.  * @internal
  16.  */
  17. class BackendPreviewRedirectListener
  18. {
  19.     /**
  20.      * @var ScopeMatcher
  21.      */
  22.     private $scopeMatcher;
  23.     public function __construct(ScopeMatcher $scopeMatcher)
  24.     {
  25.         $this->scopeMatcher $scopeMatcher;
  26.     }
  27.     public function __invoke(RequestEvent $event): void
  28.     {
  29.         if (!$event->isMasterRequest()) {
  30.             return;
  31.         }
  32.         $request $event->getRequest();
  33.         if (
  34.             !$request->attributes->has('_preview')
  35.             || true !== $request->attributes->get('_preview')
  36.             || $this->scopeMatcher->isFrontendRequest($request)
  37.             || ($request->attributes->has('_allow_preview') && true === $request->attributes->get('_allow_preview'))
  38.         ) {
  39.             return;
  40.         }
  41.         $event->setResponse(new RedirectResponse($request->getSchemeAndHttpHost().$request->getPathInfo().(null !== ($qs $request->server->get('QUERY_STRING')) ? '?'.$qs '')));
  42.     }
  43. }