【问题标题】:How to use custom Twig filters in Twig template rendered from string?如何在从字符串呈现的 Twig 模板中使用自定义 Twig 过滤器?
【发布时间】:2014-01-11 10:20:49
【问题描述】:

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

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

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

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

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

解决方案:

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

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

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

【问题讨论】:

  • 显示你的代码,你是如何解析模板的?你如何实例化树枝?
  • 你应该重用 Symfony2 中实例化的 Twig 对象,而不是自己实例化一个。这样做会给你一个干净的 Twig 环境,没有 Symfony 添加的所有功能..

标签: symfony twig


【解决方案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);

【讨论】:

  • 是的,没错。我已经更新了我的问题以显示我的工作解决方案。非常感谢!
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多