在模板缓存之前,Twig_Template :: getSource()不起作用

时间:2015-12-07 20:53:26

标签: twig

我需要加载并显示Twig模板的源代码。

模板的getSource()方法似乎可以通过使用反射来查找自己的类文件,并在其末尾读取注释块(具有Twig代码)。

public function getSource()
{
    $reflector = new ReflectionClass($this);
    $file = $reflector->getFileName();
    // ...
}

不幸的是,该文件仅在从文件缓存加载模板时可用 - 在此之前,该类在运行时定义,ReflectionClass将返回Environment.php(403) : eval()'d code作为类文件。

        if (!class_exists($cls, false)) {
            $content = $this->compileSource($this->getLoader()->getSource($name), $name);
            if ($this->bcWriteCacheFile) {
                $this->writeCacheFile($key, $content);
            } else {
                $this->cache->write($key, $content);
            }

            eval('?>'.$content);
        }

有没有其他方法可以从Twig获取源代码,或者只有在我直接找到并阅读原始.html.twig文件时才有可能?

1 个答案:

答案 0 :(得分:0)

糟糕。答案就在代码中,当然:

$content = $this->compileSource($this->getLoader()->getSource($name), $name);

我只需要用$environment->loadTemplate($name)->getSource()替换$environment->getLoader()->getSource($name)