yii2树枝子级扩展,父级布局输出两次

时间:2018-08-05 02:02:19

标签: yii2 twig

我是Twig的初学者。我目前尝试使用Twig设置Yii2布局。

我有3个Twig文件。

base.twig

{{ this.beginPage() }}
<!DOCTYOE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ app.language }}">
<head>
    <meta charset="{{ app.charset }}" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ html.encode(this.title) }}</title>
    {{ this.head() }}
    {{ html.csrfMetaTags() | raw }}
</head>
<body>
    {{ this.beginBody() }}
        {% block body %}{% endblock %}
    {{ this.endBody() }}
</body>
</html>
{{ this.endPage() }}

cp.twig

{% extends '_layouts/base.twig' %}

{% block body %}
    <div class="cp">
        {% block header %}{% endblock %}
        <hr />
        {% block content %}
            {{ content }}
        {% endblock %}
    </div>
{% endblock %}

index.twig

{% extends '_layouts/cp.twig' %}

{% block header %}this is header{% endblock %}

当我从Yii2控制器return $this->render('index');进行渲染之后,它的输出非常奇怪:

<!DOCTYOE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>

    <meta name="csrf-param" content="_csrf">
    <meta name="csrf-token" content="z_y1CPsfUBwHE6uC3dHg225wVQ8i2-eGhZa9f55Qrm39nYI6gk0TdVJ6nruf5q6WJAcCaUGolPWo9fxM_TrNHA==">

</head>
<body>

            <div class="cp">
                <hr />

<!DOCTYOE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <link href="/mlaxology/yii2/workspace/projects/pawscms/web/assets/903cba57/css/style.css" rel="stylesheet">
    <meta name="csrf-param" content="_csrf">
    <meta name="csrf-token" content="z_y1CPsfUBwHE6uC3dHg225wVQ8i2-eGhZa9f55Qrm39nYI6gk0TdVJ6nruf5q6WJAcCaUGolPWo9fxM_TrNHA==">

</head>
<body>

            <div class="cp">
        this is header        <hr />

            </div>

</body>
</html>

            </div>

</body>
</html>

它输出意外的重复父布局。

我的目标是创建一个动态布局标题,该标题可以由Twig {% block header %}{% endblock %}命令的子布局覆盖。我知道还有其他方法可以解决此问题,例如使用Twig变量存储动态标头。但是我喜欢他们使用{%block%}的方式。

我想知道为什么base.twig {% block body %}{% endblock %}正常工作,但是index.twig却出现重复内容问题...。

我已经花了2天的时间,尝试使用Google搜索,但是找不到类似的问题……最后,我认为我真的需要stackoverflow帮助。

对不起,我的英语,谢谢您阅读:)

我解决这个问题的丑陋方式:

base.twig:

{% if content is defined %}{{ content | raw }}{% else %}
{{ void(this.beginPage()) }}
<!DOCTYOE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ app.language }}">
<head>
    <meta charset="{{ app.charset }}" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ html.encode(this.title) }}</title>
    {{ this.head() }}
    {{ html.csrfMetaTags() | raw }}
</head>
<body>
    {{ this.beginBody() }}
        {%- block body %}{% endblock %}
    {{ this.endBody() }}
</body>
</html>
{{ void(this.endPage()) }}
{% endif %}

经过几次调试……之所以发生,是因为重新打印content,所以我用{% if content is defined %}{{ content | raw }}{% else %}包装临时修复程序。

有更好的方法来解决此问题吗?

0 个答案:

没有答案