由于包括翻译内容在内的多种原因,我必须构建一个简单的CMS来呈现我的Symfony2应用程序的页面。
我现在的问题是,接缝无法从字符串中呈现内容。 Twig只接受文件。我的内容可能包含像locale或类似的动态部分,因此twig的渲染能力非常有用。
我尝试使用TwibstringBundle渲染它,但它的功能非常有限,并且它不适用于路径功能。
有关解决此问题的任何建议吗?
答案 0 :(得分:15)
见http://twig.sensiolabs.org/doc/functions/template_from_string.html 和http://symfony.com/doc/current/cookbook/templating/twig_extension.html#register-an-extension-as-a-service
{% include template_from_string("Hello {{ name }}") %}
{% include template_from_string(page.template) %}
由于默认情况下未加载字符串加载器,因此需要将其添加到配置中。
# src/Acme/DemoBundle/Resources/config/services.yml
acme.twig.extension.loader:
class: Twig_Extension_StringLoader
tags:
- { name: 'twig.extension' }
其中Acme / acme是您的应用程序名称,DemoBundle是您要为其启用的软件包。
答案 1 :(得分:3)
Symfony 2.7也可以从PHP中轻松实现:
$twig = $this->get('twig');
$template = twig_template_from_string($twig, 'Hello, {{ name }}');
$output = $template->render(['name' => 'Bob']));
答案 2 :(得分:2)
twig_template_from_string
函数的源代码如下:
function twig_template_from_string(Twig_Environment $env, $template)
{
return $env->createTemplate($template);
}
这意味着如果您已经拥有twig environment
,那么最好直接致电:
$template = $env->createTemplate($templateString);
$parsedContent = $template->render(array('a'=>'b'));