使用base.html.twig作为干燥方式的Symfony2中的默认布局

时间:2012-03-27 00:28:31

标签: symfony

我有一个非常简单的问题:我有一个Symfony2应用程序,它没有使用基本布局文件base.html.twig。如何让您的应用使用此布局?好像它应该自动使用它。

修改:我发现如果我将{% extends "::base.html.twig" %}放在任何布局文件的顶部,然后将{% block body %}{% endblock %}放在我的内容周围,它将使用{{1 }}。但是,到目前为止,我只是想出了如何在每个文件的基础上执行此操作。如果你必须在每个你想要使用它的模板上做这个包含,那将是非常愚蠢的,我无法想象这样的情况,考虑到干燥原则在Symfony的其他地方应用得多好。 / p>

所以我的问题的更具体的版本是:如何让Symfony以干燥的方式全局使用base.html.twig?

5 个答案:

答案 0 :(得分:5)

首先,您应该了解Twig模板编译的内容 - 类。然后,想象一下,您所要求的就是询问如何使所有普通PHP类扩展一些基本类而不在代码中编写extends。这听起来像个好主意吗?

答案 1 :(得分:1)

有一种方法可以实现这一目标。这是不可取的,但这是可能的。

twig:
    base_template_class: Path\To\Base\TemplateClass

但是你可能会遇到问题。 Symfony2还具有不打算使用基本模板的模板,因此您可能需要寻找一种方法来覆盖系统模板的此功能。

我会看the docsthis。他们都谈论使用这个功能。

答案 2 :(得分:1)

是的,我在github上提出了this问题,这就是fabpot所说的

  

布局是模板的一部分,属于那里。你应该   能够用变量做任何你想做的事情,如果你愿意的话   有条件地扩展模板,看看这里:   http://twig.sensiolabs.org/doc/recipes.html#making-a-layout-conditional

所以,底线是我们不能这样做,或者我们不应该这样做,如果我们这样做,我们做错了......

答案 3 :(得分:0)

这不是答案,而是一种解决方法。一个很好的建议是在编辑器中保存宏并自动加载twig文件。然后,当你需要它时,应用它,你将节省大量的击键。对于代码来说,这不是干,但它适合你的手指,我更喜欢这样做,而不是修改symfony核心。

以下是VIM的宏。将其放入.vimrc,重新加载vim,然后在twig文件中以正常模式运行@t

autocmd BufNewFile,BufRead *html.twig let @t="ggO{% extends '::base.html.twig' %}\033o{% block body %}\033Go{% endblock %}\033gg"

答案 4 :(得分:-3)

看起来我已经找到了我的问题的答案,尽管我真诚地希望我错了。根据{{​​3}},您必须在每个模板页面上添加extends内容!我只是嘲笑我的电脑。

编辑:要明确,我的问题的答案显然是,这是不可能的。