扩展或包含 - Twig中什么更好?
为什么 Twig 文档建议使用扩展而不是包含?Symfony 2 文档之所以这样说,是因为“在 Symfony2 中,我们喜欢以不同的方式思考这个问题:一个模板可以由另一个模板来装饰。”但仅此而已。这只是作者的心血来潮还是更多?感谢您的帮助。
为什么 Twig 文档建议使用扩展而不是包含?Symfony 2 文档之所以这样说,是因为“在 Symfony2 中,我们喜欢以不同的方式思考这个问题:一个模板可以由另一个模板来装饰。”但仅此而已。这只是作者的心血来潮还是更多?感谢您的帮助。
何时使用继承:
您有 50 个页面共享相同的布局 - 您创建一个 layout.twig 作为父级,每个页面扩展该 layout.twig。因此,父级是通用的,子项是特定的。
何时使用包括:
在50个页面中,有6个页面共享一个HTML块 - 你创建一个share-chunk.twig并将其包含在这6个页面中。
另一种用法:
您注意到您的 layout.twig 有点杂乱,您希望对其进行模块化,因此您将 sidebar.twig 拆分为一个单独的文件,并将其包含在 layout.twig 中。
是否可以将 include 用于继承用例:
当然,为页眉,页脚和你有什么创建块,并在50个页面中的每个页面中使用包含。但如上所述,这是错误的设计。
是否可以将继承用于包含用例:
当然,在父布局.twig中为共享块创建一个空块,并创建一个扩展 layout.twig 并填充块块块的第二级子布局,然后上面示例中共享块的 6 个页面可以扩展 layout-with-chunk.twig 而不是 layout.twig。但这又是错误的设计,因为块块块不是由所有子级共享的,不应该进入基本父级。另外,您已经弄乱了继承树。
所以:
如上所述 - 这是设计问题,而不是可编程性问题。这不是关于:我可以使用不同的编程技术实现相同的结果,而是关于哪种用法是更好的设计。
我喜欢Arms的答案,但我认为你错过了他说的话。包含和扩展是不同的东西:如果你扩展,你可以改变父级,用一个包含你不能。
例如,我扩展了我的基本布局,如下所示:
{% extends "layout/default.html" %}
现在扩展给我的是使用来自父级的块!你没有包含。现在,您可以例如为每个页面专门制作一个标题:
{% block title %}My title just for this page{% endblock %}
现在,包含为您提供了更严格和固定的html,例如:
{% include 'header.html' %}
最多可能是实体重复,例如表行:
{% include 'foo' with {'foo': 'bar'} %}
因此,您可以使用包含来构建布局,并扩展基本布局以确保您的网站遵循指定的设计。