vendor/netzmacht/contao-page-context/src/Request/PageContextFactory.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Netzmacht\Contao\PageContext\Request;
  4. use Contao\CoreBundle\Framework\ContaoFramework;
  5. use Contao\PageModel;
  6. use Netzmacht\Contao\PageContext\Exception\InitializePageContextFailed;
  7. use Netzmacht\Contao\Toolkit\Data\Model\RepositoryManager;
  8. final class PageContextFactory
  9. {
  10.     /**
  11.      * Repository manager.
  12.      *
  13.      * @var RepositoryManager
  14.      */
  15.     private $repositoryManager;
  16.     /**
  17.      * The Contao framework.
  18.      *
  19.      * @var ContaoFramework
  20.      */
  21.     private $framework;
  22.     /**
  23.      * @param RepositoryManager $repositoryManager Repository manager.
  24.      * @param ContaoFramework   $framework         The Contao framework.
  25.      */
  26.     public function __construct(RepositoryManager $repositoryManagerContaoFramework $framework)
  27.     {
  28.         $this->repositoryManager $repositoryManager;
  29.         $this->framework         $framework;
  30.     }
  31.     /**
  32.      * Create page context from a given page id.
  33.      *
  34.      * @param int $pageId Page id for the page context.
  35.      *
  36.      * @throws InitializePageContextFailed When creating page context failed.
  37.      */
  38.     public function __invoke(int $pageId): PageContext
  39.     {
  40.         $this->framework->initialize();
  41.         $repository $this->repositoryManager->getRepository(PageModel::class);
  42.         $pageModel  $repository->find($pageId);
  43.         if (! $pageModel instanceof PageModel) {
  44.             throw InitializePageContextFailed::pageNotFound($pageId);
  45.         }
  46.         $pageModel->loadDetails();
  47.         /** @psalm-suppress RedundantCastGivenDocblockType - Contao doc type issue */
  48.         $rootPage $repository->find((int) $pageModel->rootId);
  49.         if (! $rootPage instanceof PageModel) {
  50.             throw InitializePageContextFailed::rootPageNotFound((int) $pageModel->id);
  51.         }
  52.         return new PageContext($pageModel$rootPage);
  53.     }
  54. }