Symfony2布局组成或继承

时间:2014-07-25 12:24:11

标签: symfony twig

我无法理解sf2中有关布局组成的一些原则。

我有这个App / Namespace / MyBundle / Resources / views / layout.html.twig模板:

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

        {% block title %}Main Title{% block subtitle %}{% endblock %}{% endblock %}
        {% block head %}<h1>Placeholdertitle</h1>{% endblock %}
        {% block body %}{% endblock %}
        {% block sidebar %}{% endblock %}

我应该如何让head.html.twig替换头块? 目前我有这个App / Bundle / Resources / views / head.html.twig模板:

{% extends 'AppNamespaceMyBundle::layout.html.twig' %}

{% block head -%}
    <h1>
    Main Title
    </h1>
{% endblock %}

然后我用这个index.html.twig加载一个页面:

{% extends 'AppNamespaceMyBundle::layout.html.twig' %}

{% block subtitle %} | Categories{% endblock %}

{% block body -%}
    <h1>Categories list</h1>

    <table class="records_list">
        <thead>
            <tr>
                <th>Id</th>
                <th>Text</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
        {% for entity in entities %}
            <tr>
                <td><a href="{{ path('category_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
                <td>{{ entity.text }}</td>
                <td>
                <ul>
                    <li>
                        <a href="{{ path('category_show', { 'id': entity.id }) }}">show</a>
                    </li>
                    <li>
                        <a href="{{ path('category_edit', { 'id': entity.id }) }}">edit</a>
                    </li>
                </ul>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>

        <ul>
        <li>
            <a href="{{ path('category_new') }}">
                Create a new entry
            </a>
        </li>
    </ul>
    {% endblock %}

在这里我得到了“Placeholdertitle”而不是“Main Title”,这意味着没有使用head.html.twig。我该如何使用head.html.twig进入layout.html.twig?

2 个答案:

答案 0 :(得分:1)

根据您的解释,我猜您想在您的索引中渲染Layout + Head。

您可以使用以下架构: Layout <extended by> Head <extended by> Index。这样,当您渲染索引时,Twig将渲染头部和布局。

另一种解决方案是使用use

PS:你不能在同一个索引文件中扩展头部和布局,正如Twig所说:模板继承是最强大的Twig功能之一,但它仅限于单继承;

答案 1 :(得分:0)

您是否尝试删除head.html.twig中头块中的“ - ”?