如何使用继承来组织你的Twig模板

3.4 版本
维护中的版本

在Symfony中一般采用三级继承来完成模板创建。它可以完美地覆盖(现有)三种不同类型的模板:

  • 首先创建一个app/Resources/views/base.html.twig 文件,它包含了你的程序的主要布局,该模板被命名为base.html.twig

  • 为你站点的每个“section”创建一个模板。比如,一个博客功能, 它有自己的模板blog/layout.html.twig。该模板只包含“与blog相关”的特定元素,比如body;

1
2
3
4
5
6
7
8
{# app/Resources/views/blog/layout.html.twig #}
{% extends 'base.html.twig' %}
 
{% block body %}
    <h1>Blog Application</h1>
 
    {% block content %}{% endblock %}
{% endblock %}
  • 为每个页面创建一个单独的模板并令它们继承合适的section模板。比如,“index”页将调用一些内容到 Blog/index.html.twig,以显示每一篇博客主题。
1
2
3
4
5
6
7
8
9
{# app/Resources/views/blog/index.html.twig #}
{% extends 'blog/layout.html.twig' %}
 
{% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
{% endblock %}

注意该模板是继承了section模板(blog/layout.html.twig),而section模板又照例继承了程序的基础布局模板(base.html.twig)。这就是通常说的三级继承模式。

你在构建程序时可以选择遵循这种模式,也可以让每个模板时直接继承程序级别的基础布局模板(如 {% extends ‘base.html.twig’ %} 。三级模板继承模式对于bundle作者来说是最佳实践,可令bundle的基础布局模板轻松被覆写,或者将其扩展为你自己的程序级基础布局。

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)