diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Bundle/TwigBundle/Loader/FilesystemLoader.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Bundle/TwigBundle/Loader/FilesystemLoader.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\TwigBundle\Loader; + +use Symfony\Component\Templating\TemplateNameParserInterface; +use Symfony\Component\Config\FileLocatorInterface; + +/** + * FilesystemLoader extends the default Twig filesystem loader + * to work with the Symfony2 paths. + * + * @author Fabien Potencier + */ +class FilesystemLoader extends \Twig_Loader_Filesystem +{ + protected $locator; + protected $parser; + + /** + * Constructor. + * + * @param FileLocatorInterface $locator A FileLocatorInterface instance + * @param TemplateNameParserInterface $parser A TemplateNameParserInterface instance + */ + public function __construct(FileLocatorInterface $locator, TemplateNameParserInterface $parser) + { + $this->locator = $locator; + $this->parser = $parser; + $this->cache = array(); + } + + /** + * Returns the path to the template file. + * + * The file locator is used to locate the template when the naming convention + * is the symfony one (i.e. the name can be parsed). + * Otherwise the template is located using the locator from the twig library. + * + * @param string|TemplateReferenceInterface $template The template + * + * @return string The path to the template file + * + * @throws \Twig_Error_Loader if the template could not be found + */ + protected function findTemplate($template) + { + $logicalName = (string) $template; + + if (isset($this->cache[$logicalName])) { + return $this->cache[$logicalName]; + } + + $file = null; + $previous = null; + try { + $template = $this->parser->parse($template); + try { + $file = $this->locator->locate($template); + } catch (\InvalidArgumentException $e) { + $previous = $e; + } + } catch (\Exception $e) { + try { + $file = parent::findTemplate($template); + } catch (\Twig_Error_Loader $e) { + $previous = $e; + } + } + + if (false === $file || null === $file) { + throw new \Twig_Error_Loader(sprintf('Unable to find template "%s".', $logicalName), -1, null, $previous); + } + + return $this->cache[$logicalName] = $file; + } +}