vendor/roothirsch/core-bundle/Site/TemplatePathInjection.php line 63

Open in your IDE?
  1. <?php
  2. namespace Roothirsch\CoreBundle\Site;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use Roothirsch\CoreBundle\Entity\User;
  5. use Symfony\Component\DependencyInjection\ContainerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Finder\Finder;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Twig\Environment;
  10. use Twig\Loader\FilesystemLoader;
  11. class TemplatePathInjection implements EventSubscriberInterface
  12. {
  13.     /**
  14.      * @var SiteProvider
  15.      */
  16.     protected $siteProvider;
  17.     /**
  18.      * @var Environment
  19.      */
  20.     protected $twig;
  21.     /**
  22.      * @var String
  23.      */
  24.     protected $projectDir;
  25.     public function __construct(SiteProvider $siteProviderEnvironment $twigString $projectDir) {
  26.         $this->siteProvider $siteProvider;
  27.         $this->twig $twig;
  28.         $this->projectDir $projectDir;
  29.     }
  30.     /**
  31.      * Returns an array of event names this subscriber wants to listen to.
  32.      *
  33.      * The array keys are event names and the value can be:
  34.      *
  35.      *  * The method name to call (priority defaults to 0)
  36.      *  * An array composed of the method name to call and the priority
  37.      *  * An array of arrays composed of the method names to call and respective
  38.      *    priorities, or 0 if unset
  39.      *
  40.      * For instance:
  41.      *
  42.      *  * array('eventName' => 'methodName')
  43.      *  * array('eventName' => array('methodName', $priority))
  44.      *  * array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  45.      *
  46.      * @return array The event names to listen to
  47.      */
  48.     public static function getSubscribedEvents(): array
  49.     {
  50.         return [
  51.             KernelEvents::REQUEST => ['onKernelRequest'EventPriorities::PRE_READ],
  52.         ];
  53.     }
  54.     public function onKernelRequest(\Symfony\Component\HttpKernel\Event\RequestEvent $event)
  55.     {
  56.         $loader $this->twig->getLoader();
  57.         if ($loader instanceof FilesystemLoader) {
  58.             $directories = [];
  59.             $finder = new Finder();
  60.             if(file_exists($this->projectDir."/vendor/roothirsch")){
  61.                 $finder->in($this->projectDir '/vendor/roothirsch/*/Resources')->name('views');
  62.                 foreach($finder->directories() as $directory) {
  63.                     $directories[] = $directory->getRealPath();
  64.                 }
  65.             }
  66.             array_push($directories,  $this->projectDir '/themes/' $this->siteProvider->getTheme());
  67.             foreach($directories as $templateDirectory) {
  68.                 if (file_exists($templateDirectory)) {
  69.                     $loader->prependPath($templateDirectory);
  70.                 }
  71.                 if (file_exists($templateDirectory '/bundles/')) {
  72.                     $finder = new Finder();
  73.                     $finder->directories()->in($templateDirectory '/bundles/');
  74.                     foreach($finder as $directory) {
  75.                         /** @var $directory \Symfony\Component\Finder\SplFileInfo */
  76.                         $loader->prependPath($directory->getRealPath(), str_replace('Bundle'''$directory->getBasename()));
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.     }
  82. }