使用base.html.twig作为Symfony2中的默认布局

使用base.html.twig作为Symfony2中的默认布局,symfony,Symfony,我有一个非常简单的问题:我有一个Symfony2应用程序,它没有使用基本布局文件base.html.twig。如何让你的应用程序使用此布局?似乎它应该自动使用它 编辑:我发现如果我把{%extends:::base.html.twig“%}放在任何布局文件的顶部,然后在我的内容周围放置{%block body%}和{%endblock%},它将使用base.html.twig。然而,到目前为止,我只知道如何在每个文件的基础上实现这一点。如果你必须在你想使用它的每一个模板上都包含这一点,那将是非常

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

编辑:我发现如果我把
{%extends:::base.html.twig“%}
放在任何布局文件的顶部,然后在我的内容周围放置
{%block body%}
{%endblock%}
,它将使用
base.html.twig
。然而,到目前为止,我只知道如何在每个文件的基础上实现这一点。如果你必须在你想使用它的每一个模板上都包含这一点,那将是非常愚蠢的,我无法想象这种情况,因为在Symfony中,DRY原则在其他任何地方都得到了很好的应用


因此,我的问题的更具体版本是:如何让Symfony以一种干巴巴的方式在全球范围内使用base.html.twig?

看起来我找到了我问题的答案,尽管我真心希望我错了。根据,您必须在每个模板页面上包含
扩展的内容!我只是把电脑吐得到处都是


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

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

有一种方法可以做到这一点。这是不明智的,但它是可能的

twig:
    base_template_class: Path\To\Base\TemplateClass
不过,你可能会遇到问题。Symfony2还有一个模板不打算使用基本模板,所以您可能需要寻找一种方法来覆盖系统模板的此功能


我会看,也会看。他们都谈到了使用此功能。

这不是一个答案,而是一个解决办法。一个很好的技巧是在编辑器中保存宏,并为
twig
文件自动加载宏。然后,当你需要它时,应用它,你将节省大量的击键。这对代码来说一点也不枯燥,但对你的手指来说,我更喜欢这样做,而不是修改symfony内核

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

autocmd BufNewFile,BufRead *html.twig let @t="ggO{% extends '::base.html.twig' %}\033o{% block body %}\033Go{% endblock %}\033gg"
是的,我在github中提出了这个问题,Fabbot就是这么说的

布局是模板的一部分,属于模板。你应该 可以用变量做任何你想做的事情,如果你想做的话 有条件地扩展模板,请查看以下内容:


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

你仔细看过文件了吗?你有一个base.html.twig,你在layout.html.twig中扩展它,并在你想要使用它的特定模板中扩展它。是的,我读了那部分。难道这还不需要我为每个模板单独添加一个
扩展
吗?是的,我想这没有捷径可走。是的,就像你需要在任何时候使用一个接口时都要把
class-ConcreteExample-implements-InterfaceeExample
。从宏导入它需要5秒钟?它使代码更加自文档化,更加灵活。如果所有模板都使用base.html.twig,您将无法将单个模板包含到另一个模板中,也无法将任何子请求呈现到另一个模板中。如果你有一个不需要扩展基础模板的模板,你会怎么做?为了让一个SF2新手明白一点,在以后的SF2版本中(截至2014年4月)仍然是这样吗?考虑到我需要每个顶级模板上的
,我必须扩展
base.html.twig
?我明白你的意思。那么,Symfony处理这个问题的方法似乎是在每个模板中自动包含一个
extends
,Symfony和Doctrine在生成的PHP类文件中自动包含一个
extends
。但是如果我不想在每个文件中扩展base/layout模板,那该怎么办呢?然后只需更改代码,告诉它扩展您想要扩展的任何内容。我宁愿将一个合理的默认值更改几次,也不愿手动粘贴几次
extends