vendor/symfony/framework-bundle/Templating/Loader/TemplateLocator.php line 14

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Bundle\FrameworkBundle\Templating\Loader;
  11. @trigger_error('The '.TemplateLocator::class.' class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.'E_USER_DEPRECATED);
  12. use Symfony\Component\Config\FileLocatorInterface;
  13. use Symfony\Component\Templating\TemplateReferenceInterface;
  14. /**
  15.  * TemplateLocator locates templates in bundles.
  16.  *
  17.  * @author Fabien Potencier <fabien@symfony.com>
  18.  *
  19.  * @deprecated since version 4.3, to be removed in 5.0; use Twig instead.
  20.  */
  21. class TemplateLocator implements FileLocatorInterface
  22. {
  23.     protected $locator;
  24.     protected $cache;
  25.     private $cacheHits = [];
  26.     /**
  27.      * @param FileLocatorInterface $locator  A FileLocatorInterface instance
  28.      * @param string               $cacheDir The cache path
  29.      */
  30.     public function __construct(FileLocatorInterface $locatorstring $cacheDir null)
  31.     {
  32.         if (null !== $cacheDir && file_exists($cache $cacheDir.'/templates.php')) {
  33.             $this->cache = require $cache;
  34.         }
  35.         $this->locator $locator;
  36.     }
  37.     /**
  38.      * Returns a full path for a given file.
  39.      *
  40.      * @return string The full path for the file
  41.      */
  42.     protected function getCacheKey($template)
  43.     {
  44.         return $template->getLogicalName();
  45.     }
  46.     /**
  47.      * Returns a full path for a given file.
  48.      *
  49.      * @param TemplateReferenceInterface $template    A template
  50.      * @param string                     $currentPath Unused
  51.      * @param bool                       $first       Unused
  52.      *
  53.      * @return string The full path for the file
  54.      *
  55.      * @throws \InvalidArgumentException When the template is not an instance of TemplateReferenceInterface
  56.      * @throws \InvalidArgumentException When the template file can not be found
  57.      */
  58.     public function locate($template$currentPath null$first true)
  59.     {
  60.         if (!$template instanceof TemplateReferenceInterface) {
  61.             throw new \InvalidArgumentException('The template must be an instance of TemplateReferenceInterface.');
  62.         }
  63.         $key $this->getCacheKey($template);
  64.         if (isset($this->cacheHits[$key])) {
  65.             return $this->cacheHits[$key];
  66.         }
  67.         if (isset($this->cache[$key])) {
  68.             return $this->cacheHits[$key] = realpath($this->cache[$key]) ?: $this->cache[$key];
  69.         }
  70.         try {
  71.             return $this->cacheHits[$key] = $this->locator->locate($template->getPath(), $currentPath);
  72.         } catch (\InvalidArgumentException $e) {
  73.             throw new \InvalidArgumentException(sprintf('Unable to find template "%s" : "%s".'$template$e->getMessage()), 0$e);
  74.         }
  75.     }
  76. }