繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM