2012-03-21 54 views
4

由于包括内容翻译在内的多种原因,我必须构建一个简单的CMS来呈现我的Symfony2应用程序的页面。从字符串/数据库渲染内容并生成链接

我现在的问题是,接缝不可能呈现来自字符串的内容。小枝只接受文件。我的内容可能包含动态部分,如语言环境或类似内容,因此枝条的渲染能力将非常有用。

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

任何建议来解决这个问题?

+0

它们是如何存储在数据库中的? – max 2012-03-22 00:46:21

+0

它们存储为带有一些html标记的简单文本。 – madc 2012-03-22 12:20:57

回答

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是您希望为其启用的包。

+0

看起来很有希望,谢谢你的回答。我将在稍后检查并报告。 – madc 2012-10-15 14:01:30

+0

昨晚执行它。我发现迄今为止唯一的缺点是,你调用的任何树枝扩展也使用字符串加载器。例外等不能很好地处理。字符串加载器不建议在外部使用,因为结果可能不如您期望的那样(即扩展,包括等等)。 – Heyflynn 2012-10-15 17:32:59

+5

添加了新的支持树枝的方式来将字符串加载为模板 – Heyflynn 2012-11-29 18:01:09

3

Symfony的2.7使得从PHP这个简单,太:

$twig = $this->get('twig'); 
    $template = twig_template_from_string($twig, 'Hello, {{ name }}'); 
    $output = $template->render(['name' => 'Bob'])); 
+0

为什么只有Symfony 2.7?也适用于Symfony 2.3。 – 2015-07-13 09:49:27

+1

不适用于我。 '我试图从命名空间'AppBundle \ Controller'' '尝试从名称空间调用函数“twig_template_from_string”。但是,这对我有用:'$ this-> get('twig') - > createTemplate('Hello,{{name}} ');' – Atan 2016-03-17 11:12:06

+0

为什么奇怪的全局函数?对于一个像树枝一样的项目来说,很不错 – mblaettermann 2016-04-21 11:18:29

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')); 
相关问题