【发布时间】:2014-01-11 10:20:49
【问题描述】:
我想从字符串渲染 Twig 模板(实际上是从数据库中,但这并不重要),并且此 question 中显示的方法工作正常。但是我不能使用在自定义 Twig 扩展中定义的自定义过滤器,它适用于以标准方式(来自文件)呈现的模板。
我应该怎么做才能允许字符串模板使用自定义过滤器?
我以这种方式从字符串中获取模板:
$env = new \Twig_Environment(new \Twig_Loader_String());
echo $env->render(
"Hello {{ name }}",
array("name" => "World")
);
我在 \Twig_Environment 类方法 addFilter 中找到了,但我的过滤器是在 Twig 扩展中定义的,所以我不知道它是否适合使用。
解决方案:
感谢 Luceos cmets,我通过使用现有的 Twig 引擎而不是创建新引擎解决了我的问题。当我以这种方式设置 Twig 环境时:
$twig = clone $this->get('twig');
$twig->setLoader(new \Twig_Loader_String());
然后一切都按预期工作。 (解决方法见http://www.techpunch.co.uk/development/render-string-twig-template-symfony2)
【问题讨论】:
-
显示你的代码,你是如何解析模板的?你如何实例化树枝?
-
你应该重用 Symfony2 中实例化的 Twig 对象,而不是自己实例化一个。这样做会给你一个干净的 Twig 环境,没有 Symfony 添加的所有功能..