vendor/symfony/twig-bundle/Loader/FilesystemLoader.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\TwigBundle\Loader;
  11. @trigger_error('The '.FilesystemLoader::class.' class is deprecated since version 4.3 and will be removed in 5.0; use Twig notation for templates instead.'E_USER_DEPRECATED);
  12. use Symfony\Component\Config\FileLocatorInterface;
  13. use Symfony\Component\Templating\TemplateNameParserInterface;
  14. use Symfony\Component\Templating\TemplateReferenceInterface;
  15. use Twig\Error\LoaderError;
  16. use Twig\Loader\FilesystemLoader as BaseFilesystemLoader;
  17. /**
  18.  * FilesystemLoader extends the default Twig filesystem loader
  19.  * to work with the Symfony paths and template references.
  20.  *
  21.  * @author Fabien Potencier <fabien@symfony.com>
  22.  *
  23.  * @deprecated since version 4.3, to be removed in 5.0; use Twig notation for templates instead.
  24.  */
  25. class FilesystemLoader extends BaseFilesystemLoader
  26. {
  27.     protected $locator;
  28.     protected $parser;
  29.     /**
  30.      * @param string|null $rootPath The root path common to all relative paths (null for getcwd())
  31.      */
  32.     public function __construct(FileLocatorInterface $locatorTemplateNameParserInterface $parserstring $rootPath null)
  33.     {
  34.         parent::__construct([], $rootPath);
  35.         $this->locator $locator;
  36.         $this->parser $parser;
  37.     }
  38.     /**
  39.      * {@inheritdoc}
  40.      *
  41.      * The name parameter might also be a TemplateReferenceInterface.
  42.      */
  43.     public function exists($name)
  44.     {
  45.         return parent::exists((string) $name);
  46.     }
  47.     /**
  48.      * Returns the path to the template file.
  49.      *
  50.      * The file locator is used to locate the template when the naming convention
  51.      * is the symfony one (i.e. the name can be parsed).
  52.      * Otherwise the template is located using the locator from the twig library.
  53.      *
  54.      * @param string|TemplateReferenceInterface $template The template
  55.      * @param bool                              $throw    When true, a LoaderError exception will be thrown if a template could not be found
  56.      *
  57.      * @return string The path to the template file
  58.      *
  59.      * @throws LoaderError if the template could not be found
  60.      */
  61.     protected function findTemplate($template$throw true)
  62.     {
  63.         $logicalName = (string) $template;
  64.         if (isset($this->cache[$logicalName])) {
  65.             return $this->cache[$logicalName];
  66.         }
  67.         $file null;
  68.         try {
  69.             $file parent::findTemplate($logicalName);
  70.         } catch (LoaderError $e) {
  71.             $twigLoaderException $e;
  72.             // for BC
  73.             try {
  74.                 $template $this->parser->parse($template);
  75.                 $file $this->locator->locate($template);
  76.             } catch (\Exception $e) {
  77.             }
  78.         }
  79.         if (false === $file || null === $file) {
  80.             if ($throw) {
  81.                 throw $twigLoaderException;
  82.             }
  83.             return false;
  84.         }
  85.         return $this->cache[$logicalName] = $file;
  86.     }
  87. }