我是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 %}
包装临时修复程序。
有更好的方法来解决此问题吗?