从字符串/数据库渲染内容并使用twig生成链接

时间:2012-03-21 11:06:33

标签: symfony twig

由于包括翻译内容在内的多种原因,我必须构建一个简单的CMS来呈现我的Symfony2应用程序的页面。

我现在的问题是,接缝无法从字符串中呈现内容。 Twig只接受文件。我的内容可能包含像locale或类似的动态部分,因此twig的渲染能力非常有用。

我尝试使用TwibstringBundle渲染它,但它的功能非常有限,并且它不适用于路径功能。

有关解决此问题的任何建议吗?

3 个答案:

答案 0 :(得分:15)

http://twig.sensiolabs.org/doc/functions/template_from_string.htmlhttp://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'));