我在一个包中有很多模板,它们都扩展了相同的layout.html.twig.而不是必须定义:
{% extends 'MyBundle::layout.html.twig' %}
Run Code Online (Sandbox Code Playgroud)
在每个模板的顶部,有没有办法配置这个?
我怀疑我需要创建一个pre或postExecute()方法,它基于在渲染之前扩展模板的事件监听器.
这不是一个好主意,因为并非每个模板都必须扩展布局:有一些 \xe2\x80\x9csystem\xe2\x80\x9d 模板,例如form_div_layout.html.twig并不意味着扩展任何内容。此外,并非您编写的每个模板都必须扩展布局;您将遇到许多小型可嵌入模板从其他模板引用的用例。
如果您尝试在每个模板上强制布局,则必须编写一些逻辑来排除 \xe2\x80\x9csystem\xe2\x80\x9d 和可嵌入模板,以便它们不会扩展任何内容,并且您将也必须对布局模板执行相同的操作,这样它就不会无限扩展。在这种情况下,您将扭转问题:您必须明确声明哪些模板不应扩展您的布局,而不是显式定义要在每个模板中扩展的布局。这很快就会变得非常混乱。
\n\n为了更全面地理解这个想法,您需要知道,在幕后,模板实际上只是 PHP 类。让一个特定的类成为所有其他类的父类,然后明确声明哪些类不应扩展该父类,这对您来说有意义吗?
\n\n但如果我还没有说服你不要这样做,有一个 Twig 设置可以让你为所有模板设置基本模板类:
\n\ntwig:\n base_template_class: Your\\Layout\\ClassName\\Here\nRun Code Online (Sandbox Code Playgroud)\n\n您可以扩展\\Twig_Template或实现\\Twig_TemplateInterface一些 \xe2\x80\x9cfun\xe2\x80\x9d 几个小时,之后我希望您能被说服放弃这个想法。祝你好运。:)