如何在从字符串呈现的Twig模板中使用自定义Twig过滤器?

时间:2013-12-23 08:13:57

标签: symfony twig

我想从字符串中渲染Twig模板(实际上是从数据库中渲染但不重要),并且此question中显示的方法工作正常。但是我不能使用自定义Twig扩展中定义的自定义过滤器,它可以在以标准方式(从文件)呈现的模板中工作。

如何允许字符串模板使用自定义过滤器?

我以这种方式从字符串中获取模板:

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

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

解决方案:

感谢 Luceos 评论我只是通过使用现有的Twig引擎解决了我的问题,而不是创建新的。当我以这种方式设置Twig Environment时:

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

然后一切都按预期工作。 (http://www.techpunch.co.uk/development/render-string-twig-template-symfony2

中找到的解决方案

1 个答案:

答案 0 :(得分:1)

使用Symfony的Twig实例化对象,不要设置自己的对象。设置自己的环境会遗漏Symfony的所有附加功能。

例如,使用控制器中的render函数: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);