提问者:小点点

如何在从字符串渲染的细枝模板中使用自定义细枝过滤器?


我想从字符串中呈现细枝模板(事实上是从数据库中,但这并不重要),这个问题中显示的方法工作得很好。但我不能使用我的自定义过滤器,它是在自定义细枝扩展中定义的,它在以标准方式(从文件)呈现的模板中工作。

我应该怎么做才能允许字符串模板使用自定义过滤器?

我通过以下方式从字符串获取模板:

$env = new \Twig_Environment(new \Twig_Loader_String());
echo $env->render(
  "Hello {{ name }}",
  array("name" => "World")
);

我在\Twig_Environment类方法addFilter中找到了,但是我的过滤器是在Twig扩展中定义的,所以我不知道它是否是正确的方法。

感谢Luceos的评论,我已经解决了我的问题,只是使用现有的树枝引擎,而不是创建一个新的。当我这样设置树枝环境时:

$twig = clone $this->get('twig');
$twig->setLoader(new \Twig_Loader_String());

然后一切按预期进行。(解决方案见http://www.techpunch.co.uk/development/render-string-twig-template-symfony2)


共1个答案

匿名用户

使用Symfony的Twig实例化对象,不要设置自己的对象。设置自己的环境省略了Symfony添加的所有功能。

例如,在控制器中使用渲染函数:http://symfony.com/doc/current/book/templating.html#index-8

或者直接调用模板服务:http://symfony.com/doc/current/book/templating.html#index-12

use Symfony\Component\HttpFoundation\Response;

$engine = $this->container->get('templating');
$content = $engine->render('AcmeArticleBundle:Article:index.html.twig');

return $response = new Response($content);