Twig字符串渲染和Symfony扩展

6

我在我的Symfony2项目中使用Twig来渲染变量的模板:

$env = new \Twig_Environment(new \Twig_Loader_String());
$render = $env->render(
    $renderString,
    $params
);

当我试图使用Symfony的Twig函数(如'path'、'url'、'asset'、'controller'等)时,它会抛出异常"The function "path" does not exist in..."。有没有办法将这个函数注入到Twig_Environment中呢?

2个回答

12

这种方法不需要克隆twig环境:(在symfony 3中测试过)

$rendered = $this->get('twig')
    ->createTemplate('Hi {{ name }}!')
    ->render(['name' => 'simon']);

Symfony的扩展如path,像请求的那样工作。


这是一个更干净的解决方案,因为它不需要实例化其他对象,并且“twig”服务可以注入到您的服务中。但遗憾的是,Twig_Environment类没有接口。 - drakonli

6

试试这个:

$twig = clone $this->get('twig');
$twig->setLoader(new \Twig_Loader_String());
$rendered = $twig->render(
    "Test string template: {{ result|humanize }}",
    array("result" => "mega_success")
);

参见如何在Symfony2中将字符串呈现为Twig模板


我想知道在克隆原来的Twig环境时是否存在问题(例如潜在的内存问题或原始环境中的奇怪副作用)? - Dimitry K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接