src/Controller/Front/PageController.php line 58

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\Front;
  4. use App\Config\Pages;
  5. use App\Entity\Page\Page;
  6. use App\Entity\Page\PageTranslation;
  7. use App\Provider\PageProviderInterface;
  8. use App\Repository\DietRepository;
  9. use DateTime;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  17. use Symfony\Component\HttpKernel\Exception\HttpException;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use App\ParamConverter\RedirectParamConverter;
  20. /**
  21.  * @Route("", name="front-")
  22.  */
  23. class PageController extends AbstractController
  24. {
  25.     private array $locales = [];
  26.     public function __construct(
  27.         private ParameterBagInterface $parameterBag,
  28.         private RequestStack $session,
  29.     ) {
  30.         $this->locales $this->parameterBag->get('app.supported_locales_data');
  31.     }
  32.     /**
  33.      * @Route(
  34.      *      path="/{url}",
  35.      *      name="page",
  36.      *      requirements={
  37.      *          "_locale": "%app.supported_locales%",
  38.      *          "url": "[^.]+"
  39.      *      },
  40.      *     methods={"GET"}
  41.      * ),
  42.      * @ParamConverter(
  43.      *     converter="redirect_param_converter",
  44.      *     "pageTranslation",
  45.      *     options={
  46.      *          "mapping": {
  47.      *              "url": "url"
  48.      *          }
  49.      *      }
  50.      * )
  51.      */
  52.     public function getPageAction(
  53.         Request $request,
  54.         PageTranslation $pageTranslation,
  55.         string $_locale 'pl',
  56.         string $url ''
  57.     ): Response {
  58.         $isSlashRedirect $request->request->get('isSlashRedirect');
  59.         if($isSlashRedirect) {
  60.             $redirectLink $request->request->get('slashRedirectLink');
  61.             $response $this->redirect($redirectLink301);
  62.             $response->setPublic();
  63.             $response->setMaxAge(0);
  64.             return $response;
  65.         }
  66.         $isRedirect $request->request->get('isRedirect');
  67.         if ($isRedirect) {
  68.             $redirectLink $request->request->get('redirectLink');
  69.             $response $this->redirect($redirectLink301);
  70.             $response->setPublic();
  71.             $response->setMaxAge(0);
  72.             return $response;
  73.         }
  74.         $isRedirectString $request->request->get('isRedirectString');
  75.         if ($isRedirectString) {
  76.             $redirectLink $request->request->get('redirectLinkString');
  77.             $response $this->redirect($redirectLink301);
  78.             $response->setPublic();
  79.             $response->setMaxAge(0);
  80.             return $response;
  81.         }
  82.         if ($_locale) {
  83.             if (!$locale $this->locales[$_locale]) {
  84.                 return $this->createNotFoundException("Could not find page translation for locale \"$_locale\"");
  85.             }
  86.             $this->session->getSession()->set('_locale'$_locale);
  87.             $request->setLocale($_locale);
  88.             //$request->setDefaultLocale($_locale);
  89.         }
  90.         $user $this->getUser();
  91.         $page $pageTranslation->getTranslatable();
  92.         if (!$page->getIsPublished() && !$user) {
  93.             throw new HttpException(404'This page is not available yet');
  94.         }
  95.         if ($forwardResponse $this->getForwardResponseForPage($page$request)) {
  96.             return $forwardResponse;
  97.         }
  98.         $templatePath 'front/index.twig';
  99.         $viewParams = [
  100.             "entity" => $page,
  101.             "currentUrl" => [
  102.                 "locale" => $request->getLocale(),
  103.             ]
  104.         ];
  105.         $response $this->render($templatePath$viewParams);
  106.         if ("GET" === $request->getMethod()) {
  107.             $response->setPublic();
  108.             $response->setExpires(new DateTime("+1 hour"));
  109.             $response->setMaxAge(3600);
  110.         }
  111.         return $response;
  112.     }
  113.     private function getForwardResponseForPage(Page $pageRequest $request)
  114.     {
  115. //        $configForTypes = [
  116. //            Pages::CATEGORY => BlogController::class . "::router",
  117. //        ];
  118.         $configForSpecificPages = [
  119.             //Pages::BLOG_LIST => BlogController::class . "::router",
  120.         ];
  121.         $controller $configForSpecificPages[$page->getMigrationId()]
  122.             ?? $configForTypes[$page->getType()]
  123.             ?? null;
  124.         if (!$controller) {
  125.             return;
  126.         }
  127.         return $this->forward(
  128.             $controller,
  129.             [
  130.                 "page" => $page,
  131.                 "originalRequest" => $request,
  132.             ]
  133.         );
  134.     }
  135. }