[英]How to use custom Twig filters in Twig template rendered from string?
我想从字符串渲染Twig模板(实际上是从数据库渲染的,但这没关系),并且此问题中显示的方法效果很好。 但是我不能使用在自定义Twig扩展中定义的自定义过滤器,该过滤器只能在以标准方式(从文件)呈现的模板中使用。
如何允许字符串模板使用自定义过滤器?
我以这种方式从字符串获取模板:
$env = new \Twig_Environment(new \Twig_Loader_String());
echo $env->render(
"Hello {{ name }}",
array("name" => "World")
);
我已经在\\Twig_Environment
类方法addFilter
找到了,但是我的过滤器是在Twig扩展名中定义的,所以我不知道它是否适合使用。
感谢Luceos的评论,仅使用现有的Twig引擎而不是创建新的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中找到 )
使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.