我想从字符串中呈现细枝模板(事实上是从数据库中,但这并不重要),这个问题中显示的方法工作得很好。但我不能使用我的自定义过滤器,它是在自定义细枝扩展中定义的,它在以标准方式(从文件)呈现的模板中工作。
我应该怎么做才能允许字符串模板使用自定义过滤器?
我通过以下方式从字符串获取模板:
$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)
使用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);