lib/Twig/lib/Twig/Environment.php
public function loadTemplate($name, $index = null)
    {
        $cls = $mainCls = $this->getTemplateClass($name);
        if (null !== $index) {
            $cls .= '_'.$index;
        }

        if (isset($this->loadedTemplates[$cls])) {
            return $this->loadedTemplates[$cls];
        }

        if (!class_exists($cls, false)) {
            if ($this->bcGetCacheFilename) {
                $key = $this->getCacheFilename($name);
            } else {
                $key = $this->cache->generateKey($name, $mainCls);
            }

            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
                $this->cache->load($key);
            }

            if (!class_exists($cls, false)) {
                $loader = $this->getLoader();
                if (!$loader instanceof Twig_SourceContextLoaderInterface) {
                    $source = new Twig_Source($loader->getSource($name), $name);
                } else {
                    $source = $loader->getSourceContext($name);
                }

                $content = $this->compileSource($source);

                if ($this->bcWriteCacheFile) {
                    $this->writeCacheFile($key, $content);
                } else {
                    $this->cache->write($key, $content);
                    $this->cache->load($key);
                }

                if (!class_exists($mainCls, false)) {
                    /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */
                    eval('?>'.$content);
                }
            }

            if (!class_exists($cls, false)) {
                throw new Twig_Error_Runtime(sprintf('Failed to load Twig template "%s", index "%s": cache is corrupted.', $name, $index), -1, $source);
            }
        }

        if (!$this->runtimeInitialized) {
            $this->initRuntime();
        }

        if (isset($this->loading[$cls])) {
            throw new Twig_Error_Runtime(sprintf('Circular reference detected for Twig template "%s", path: %s.', $name, implode(' -> ', array_merge($this->loading, array($name)))));
        }

        $this->loading[$cls] = $name;

        try {
            $this->loadedTemplates[$cls] = new $cls($this);
            unset($this->loading[$cls]);
        } catch (\Exception $e) {
            unset($this->loading[$cls]);

            throw $e;
        }

        return $this->loadedTemplates[$cls];
    }
public function loadTemplate($name, $index = null)
    {
        $cls = $mainCls = $this->getTemplateClass($name);
        if (null !== $index) {
            $cls .= '_'.$index;
        }

        if (isset($this->loadedTemplates[$cls])) {
            return $this->loadedTemplates[$cls];
        }

        if (!class_exists($cls, false)) {
            if ($this->bcGetCacheFilename) {
                $key = $this->getCacheFilename($name);
            } else {
                $key = $this->cache->generateKey($name, $mainCls);
            }

            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {
                $this->cache->load($key);
            }

            if (!class_exists($cls, false)) {
                $loader = $this->getLoader();
                if (!$loader instanceof Twig_SourceContextLoaderInterface) {
                    $source = new Twig_Source($loader->getSource($name), $name);
                } else {
                    $source = $loader->getSourceContext($name);
                }

                $content = $this->compileSource($source);

                if ($this->bcWriteCacheFile) {
                    $this->writeCacheFile($key, $content);
                } else {
                    $this->cache->write($key, $content);
                    $this->cache->load($key);
                }

                if (!class_exists($mainCls, false)) {
                    /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */
                    eval('?>'.$content);
                }
            }

            if (!class_exists($cls, false)) {
                throw new Twig_Error_Runtime(sprintf('Failed to load Twig template "%s", index "%s": cache is corrupted.', $name, $index), -1, $source);
            }
        }

        if (!$this->runtimeInitialized) {
            $this->initRuntime();
        }

        if (isset($this->loading[$cls])) {
            throw new Twig_Error_Runtime(sprintf('Circular reference detected for Twig template "%s", path: %s.', $name, implode(' -> ', array_merge($this->loading, array($name)))));
        }

        $this->loading[$cls] = $name;

        try {
            $this->loadedTemplates[$cls] = new $cls($this);
            unset($this->loading[$cls]);
        } catch (\Exception $e) {
            unset($this->loading[$cls]);

            throw $e;
        }

        return $this->loadedTemplates[$cls];
    }
public function loadTemplate ( $ name , $ index = null ) { $ cls = $ mainCls = $ this -> getTemplateClass ( $ name ) ; if ( null !== $ index ) { $ cls .= '_' . $ index ; } if ( isset ( $ this -> loadedTemplates [ $ cls ] ) ) { return $ this -> loadedTemplates [ $ cls ] ; } if ( ! class_exists ( $ cls , false ) ) { if ( $ this -> bcGetCacheFilename ) { $ key = $ this -> getCacheFilename ( $ name ) ; } else { $ key = $ this -> cache -> generateKey ( $ name , $ mainCls ) ; } if ( ! $ this -> isAutoReload ( ) || $ this -> isTemplateFresh ( $ name , $ this -> cache -> getTimestamp ( $ key ) ) ) { $ this -> cache -> load ( $ key ) ; } if ( ! class_exists ( $ cls , false ) ) { $ loader = $ this -> getLoader ( ) ; if ( ! $ loader instanceof Twig_SourceContextLoaderInterface ) { $ source = new Twig_Source ( $ loader -> getSource ( $ name ) , $ name ) ; } else { $ source = $ loader -> getSourceContext ( $ name ) ; } $ content = $ this -> compileSource ( $ source ) ; if ( $ this -> bcWriteCacheFile ) { $ this -> writeCacheFile ( $ key , $ content ) ; } else { $ this -> cache -> write ( $ key , $ content ) ; $ this -> cache -> load ( $ key ) ; } if ( ! class_exists ( $ mainCls , false ) ) { /* Last line of defense if either $this->bcWriteCacheFile was used,
                     * $this->cache is implemented as a no-op or we have a race condition
                     * where the cache was cleared between the above calls to write to and load from
                     * the cache.
                     */ eval ( '?>' . $ content ) ; } } if ( ! class_exists ( $ cls , false ) ) { throw new Twig_Error_Runtime ( sprintf ( 'Failed to load Twig template "%s", index "%s": cache is corrupted.' , $ name , $ index ) , - 1 , $ source ) ; } } if ( ! $ this -> runtimeInitialized ) { $ this -> initRuntime ( ) ; } if ( isset ( $ this -> loading [ $ cls ] ) ) { throw new Twig_Error_Runtime ( sprintf ( 'Circular reference detected for Twig template "%s", path: %s.' , $ name , implode ( ' -> ' , array_merge ( $ this -> loading , array ( $ name ) ) ) ) ) ; } $ this -> loading [ $ cls ] = $ name ; try { $ this -> loadedTemplates [ $ cls ] = new $ cls ( $ this ) ; unset ( $ this -> loading [ $ cls ] ) ; } catch ( \ Exception $ e ) { unset ( $ this -> loading [ $ cls ] ) ; throw $ e ; } return $ this -> loadedTemplates [ $ cls ] ; }
Loads a template internal representation.

This method is for internal use only and should never be called
directly.

@param string $name  The template name
@param int    $index The index if it is an embedded template

@return Twig_TemplateInterface A template instance representing the given template name

@throws Twig_Error_Loader  When the template cannot be found
@throws Twig_Error_Runtime When a previously generated cache is corrupted
@throws Twig_Error_Syntax  When an error occurred during compilation

@internal
Loads a template internal representation .