在Twig中include和block有什么区别?

时间:2016-10-18 11:00:03

标签: symfony twig

我正在尝试为使用Twig的PhileCMS制作一个引导主题。现在我在菜单上工作。我一直在寻找如何使一个页面活跃,我一直在看到关于块的东西。现在我的index.html看起来像这样

{% include 'header.html' %}
<body>
{% include 'nav.html' %}
<div class="container"}
{{ content }}
{% include 'footer.html' %}

我的nav.html看起来像这样:

<div class="header clearfix">
    <nav>
      <ul class="nav nav-pills pull-right">
        <li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'home' %}active{% endif %}">Home</a></li>
        <li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'about' %}active{% endif %}">About</a></li>
        <li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'contact' %}active{% endif %}">Contact</a></li>
      </ul>
    </nav>
    <h3 class="text-muted">{{ site_title }}</h3>
</div>

这是正确的编码练习,还是我应该用块做什么?我真的不明白块是如何工作的。

2 个答案:

答案 0 :(得分:1)

您可以使用新块包含全新模板。 - 那是包括做什么的。您注入在其他文件中定义的模板或模板。所以:

{% include 'nav.html' %} 

将注入你放在那里的任何东西,它将取代整个短语,这行代码含有nav.html的内容。

另一方面,当您使用{%block body%}时,您将覆盖从父模板继承的此主体块。例如:

如果你在base.html.twig中有块名为body,你将在另一个模板中继承它(比如说blog.html.twig):

{% extends 'base.html.twig' %}

然后执行此操作:

{% block body %}
   Hello World
{% endblock %}

您将把这个hello世界放在base.html.twig中的body块中。

我希望你现在清楚了。

P.S

如果你想使用树枝,请确保使用树枝延伸!

答案 1 :(得分:0)

如果您要求最佳实践,那么正如Symfony的Templating文档中所述:

  

在构建应用程序时,您可以选择使用此方法,或者只是让每个页面模板直接扩展​​基本应用程序模板(例如{%extends'base.html.twig'%})。 三模板模型是供应商包使用的最佳实践方法,因此可以轻松覆盖包的基本模板,以正确扩展应用程序的基本布局。

这背后的想法是:

1- 基本模板(1级)

2-A 布局模板(2级)

3 - 个人模板(级别3)

以下是一个示例代码(最初来自Symfony2)documentation

{# layout.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}
    <h1>Blog Application</h1>

    {% block content %}{% endblock %}
{% endblock %}


{# index.html.twig #}
{% extends 'layout.html.twig' %}

{% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
{% endblock %}

p.s :即使你很难处理Symfony2,但恕我直言的原则应该是一样的,因为我们使用的是Twig模板引擎。