vendor/contao/core-bundle/src/Twig/Loader/ContaoFilesystemLoaderWarmer.php line 96

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\Twig\Loader;
  11. use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
  12. use Symfony\Component\HttpKernel\Event\RequestEvent;
  13. use Webmozart\PathUtil\Path;
  14. /**
  15.  * @experimental
  16.  */
  17. class ContaoFilesystemLoaderWarmer implements CacheWarmerInterface
  18. {
  19.     /**
  20.      * @var ContaoFilesystemLoader
  21.      */
  22.     private $loader;
  23.     /**
  24.      * @var TemplateLocator
  25.      */
  26.     private $templateLocator;
  27.     /**
  28.      * @var string
  29.      */
  30.     private $projectDir;
  31.     /**
  32.      * @var string
  33.      */
  34.     private $environment;
  35.     public function __construct(ContaoFilesystemLoader $contaoFilesystemLoaderTemplateLocator $templateLocatorstring $projectDirstring $environment)
  36.     {
  37.         $this->loader $contaoFilesystemLoader;
  38.         $this->templateLocator $templateLocator;
  39.         $this->projectDir $projectDir;
  40.         $this->environment $environment;
  41.     }
  42.     public function warmUp($cacheDir null): array
  43.     {
  44.         // Theme paths
  45.         $themePaths $this->templateLocator->findThemeDirectories();
  46.         foreach ($themePaths as $slug => $path) {
  47.             $this->loader->addPath($path"Contao_Theme_$slug"true);
  48.         }
  49.         // Global templates path
  50.         $globalTemplatesPath Path::join($this->projectDir'templates');
  51.         $this->loader->addPath($globalTemplatesPath'Contao');
  52.         $this->loader->addPath($globalTemplatesPath'Contao_Global'true);
  53.         // Bundle paths (including App)
  54.         foreach ($this->templateLocator->findResourcesPaths() as $name => $resourcesPaths) {
  55.             foreach ($resourcesPaths as $path) {
  56.                 $this->loader->addPath($path'Contao');
  57.                 $this->loader->addPath($path"Contao_$name"true);
  58.             }
  59.         }
  60.         $this->loader->buildInheritanceChains();
  61.         $this->loader->persist();
  62.         return [];
  63.     }
  64.     public function isOptional(): bool
  65.     {
  66.         return false;
  67.     }
  68.     public function refresh(): void
  69.     {
  70.         $this->loader->clear();
  71.         $this->warmUp();
  72.     }
  73.     /**
  74.      * Auto refresh in dev mode.
  75.      */
  76.     public function onKernelRequest(RequestEvent $event): void
  77.     {
  78.         if ('dev' === $this->environment) {
  79.             $this->refresh();
  80.         }
  81.     }
  82. }