我在一个包中有很多模板,它们都扩展了相同的layout.html.twig。而不是必须定义:
{% extends 'MyBundle::layout.html.twig' %}
在每个模板的顶部,有没有办法配置它?
我怀疑我需要创建一个pre或postExecute()方法,它基于在渲染之前扩展模板的事件监听器。
答案 0 :(得分:2)
这不是一个好主意,因为不是每个模板都必须扩展布局:有一些“系统”模板,如form_div_layout.html.twig
,并不意味着扩展任何东西。此外,并非您编写的每个模板都必须扩展布局;你会遇到很多用于小型嵌入式模板的用例,以便从其他模板中引用。
如果您尝试在每个模板上强制布局,则必须编写一些逻辑来排除“系统”和可嵌入模板,以便它们不会扩展任何内容,并且您必须执行相同操作您的布局模板也是如此,因此它不会无限延伸。在这种情况下,您将解决问题:您不必明确定义要在每个模板中扩展哪个布局,而是必须明确说明不扩展布局的模板。这会很快变得非常混乱。
为了更全面地掌握这个想法,你需要知道,在幕后,模板实际上只是PHP类。将特定的类作为每个其他类的父类是否有意义,然后明确说明哪些类不扩展此父类?
但是,如果我不相信你不这样做,有一个Twig设置,它允许你为所有模板设置基本模板类:
twig:
base_template_class: Your\Layout\ClassName\Here
你可以延长\Twig_Template
或实施\Twig_TemplateInterface
并在几个小时内获得一些“乐趣”,之后我希望你会被说服放弃这个想法。祝好运。 :)