vendor/contao/core-bundle/src/Controller/Page/RootPageController.php line 27

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\Controller\Page;
  11. use Contao\CoreBundle\Controller\AbstractController;
  12. use Contao\CoreBundle\Exception\NoActivePageFoundException;
  13. use Contao\CoreBundle\ServiceAnnotation\Page;
  14. use Contao\PageModel;
  15. use Psr\Log\LoggerInterface;
  16. use Symfony\Component\HttpFoundation\Response;
  17. /**
  18.  * @Page(contentComposition=false)
  19.  *
  20.  * @internal
  21.  */
  22. class RootPageController extends AbstractController
  23. {
  24.     private ?LoggerInterface $logger;
  25.     public function __construct(LoggerInterface $logger null)
  26.     {
  27.         $this->logger $logger;
  28.     }
  29.     public function __invoke(PageModel $pageModel): Response
  30.     {
  31.         $nextPage $this->getNextPage((int) $pageModel->id);
  32.         return $this->redirect($nextPage->getAbsoluteUrl());
  33.     }
  34.     private function getNextPage(int $rootPageId): PageModel
  35.     {
  36.         $nextPage $this->getContaoAdapter(PageModel::class)->findFirstPublishedByPid($rootPageId);
  37.         if ($nextPage instanceof PageModel) {
  38.             return $nextPage;
  39.         }
  40.         if ($this->logger) {
  41.             $this->logger->error('No active page found under root page "'.$rootPageId.'"');
  42.         }
  43.         throw new NoActivePageFoundException('No active page found under root page.');
  44.     }
  45. }