123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- /*
- * This file is part of Twig.
- *
- * (c) 2011 Fabien Potencier
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- /**
- * Loads templates from other loaders.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
- class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterface
- {
- private $hasSourceCache = array();
- protected $loaders = array();
- /**
- * Constructor.
- *
- * @param Twig_LoaderInterface[] $loaders An array of loader instances
- */
- public function __construct(array $loaders = array())
- {
- foreach ($loaders as $loader) {
- $this->addLoader($loader);
- }
- }
- /**
- * Adds a loader instance.
- *
- * @param Twig_LoaderInterface $loader A Loader instance
- */
- public function addLoader(Twig_LoaderInterface $loader)
- {
- $this->loaders[] = $loader;
- $this->hasSourceCache = array();
- }
- /**
- * {@inheritdoc}
- */
- public function getSource($name)
- {
- $exceptions = array();
- foreach ($this->loaders as $loader) {
- if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
- continue;
- }
- try {
- return $loader->getSource($name);
- } catch (Twig_Error_Loader $e) {
- $exceptions[] = $e->getMessage();
- }
- }
- throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
- }
- /**
- * {@inheritdoc}
- */
- public function exists($name)
- {
- $name = (string) $name;
- if (isset($this->hasSourceCache[$name])) {
- return $this->hasSourceCache[$name];
- }
- foreach ($this->loaders as $loader) {
- if ($loader instanceof Twig_ExistsLoaderInterface) {
- if ($loader->exists($name)) {
- return $this->hasSourceCache[$name] = true;
- }
- continue;
- }
- try {
- $loader->getSource($name);
- return $this->hasSourceCache[$name] = true;
- } catch (Twig_Error_Loader $e) {
- }
- }
- return $this->hasSourceCache[$name] = false;
- }
- /**
- * {@inheritdoc}
- */
- public function getCacheKey($name)
- {
- $exceptions = array();
- foreach ($this->loaders as $loader) {
- if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
- continue;
- }
- try {
- return $loader->getCacheKey($name);
- } catch (Twig_Error_Loader $e) {
- $exceptions[] = get_class($loader).': '.$e->getMessage();
- }
- }
- throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
- }
- /**
- * {@inheritdoc}
- */
- public function isFresh($name, $time)
- {
- $exceptions = array();
- foreach ($this->loaders as $loader) {
- if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) {
- continue;
- }
- try {
- return $loader->isFresh($name, $time);
- } catch (Twig_Error_Loader $e) {
- $exceptions[] = get_class($loader).': '.$e->getMessage();
- }
- }
- throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));
- }
- }
|