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 string $cacheDir The cache path
  28.      */
  29.     public function __construct(FileLocatorInterface $locatorstring $cacheDir null)
  30.     {
  31.         if (null !== $cacheDir && file_exists($cache $cacheDir.'/templates.php')) {
  32.             $this->cache = require $cache;
  33.         }
  34.         $this->locator $locator;
  35.     }
  36.     /**
  37.      * Returns a full path for a given file.
  38.      *
  39.      * @return string The full path for the file
  40.      */
  41.     protected function getCacheKey($template)
  42.     {
  43.         return $template->getLogicalName();
  44.     }
  45.     /**
  46.      * Returns a full path for a given file.
  47.      *
  48.      * @param TemplateReferenceInterface $template    A template
  49.      * @param string                     $currentPath Unused
  50.      * @param bool                       $first       Unused
  51.      *
  52.      * @return string The full path for the file
  53.      *
  54.      * @throws \InvalidArgumentException When the template is not an instance of TemplateReferenceInterface
  55.      * @throws \InvalidArgumentException When the template file can not be found
  56.      */
  57.     public function locate($template$currentPath null$first true)
  58.     {
  59.         if (!$template instanceof TemplateReferenceInterface) {
  60.             throw new \InvalidArgumentException('The template must be an instance of TemplateReferenceInterface.');
  61.         }
  62.         $key $this->getCacheKey($template);
  63.         if (isset($this->cacheHits[$key])) {
  64.             return $this->cacheHits[$key];
  65.         }
  66.         if (isset($this->cache[$key])) {
  67.             return $this->cacheHits[$key] = realpath($this->cache[$key]) ?: $this->cache[$key];
  68.         }
  69.         try {
  70.             return $this->cacheHits[$key] = $this->locator->locate($template->getPath(), $currentPath);
  71.         } catch (\InvalidArgumentException $e) {
  72.             throw new \InvalidArgumentException(sprintf('Unable to find template "%s": '$template).$e->getMessage(), 0$e);
  73.         }
  74.     }
  75. }