我有一个非常简单的问题:我有一个Symfony2应用程序,它没有使用基本布局文件base.html.twig。如何让您的应用使用此布局?好像它应该自动使用它。
修改:我发现如果我将{% extends "::base.html.twig" %}
放在任何布局文件的顶部,然后将{% block body %}
和{% endblock %}
放在我的内容周围,它将使用{{1 }}。但是,到目前为止,我只是想出了如何在每个文件的基础上执行此操作。如果你必须在每个你想要使用它的模板上做这个包含,那将是非常愚蠢的,我无法想象这样的情况,考虑到干燥原则在Symfony的其他地方应用得多好。 / p>
所以我的问题的更具体的版本是:如何让Symfony以干燥的方式全局使用base.html.twig?
答案 0 :(得分:5)
首先,您应该了解Twig模板编译的内容 - 类。然后,想象一下,您所要求的就是询问如何使所有普通PHP类扩展一些基本类而不在代码中编写extends
。这听起来像个好主意吗?
答案 1 :(得分:1)
有一种方法可以实现这一目标。这是不可取的,但这是可能的。
twig:
base_template_class: Path\To\Base\TemplateClass
但是你可能会遇到问题。 Symfony2还具有不打算使用基本模板的模板,因此您可能需要寻找一种方法来覆盖系统模板的此功能。
答案 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
内容!我只是嘲笑我的电脑。
编辑:要明确,我的问题的答案显然是,这是不可能的。