使用装饰器
在Yii中,我们可以将内容封装到一个装饰器中。装饰器的常用方法是布局。当你使用你的控制器的渲染方法渲染一个视图的时候,Yii自动使用主布局装饰它。让我们创建一个简单的装饰器,它会正确的格式化引用。
准备
按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的应用。
如何做…
- 首先,我们将会创建一个装饰器文件
@app/views/decorators/quote.php
:
<div class="quote">
<h2>“<?= $content?>”, <?= $author?></h2>
</div>
- 现在,使用如下代码替换
@app/views/site/index.php
文件的内容:
<?php
use yii\widgets\ContentDecorator;
/* @var */
?>
<?php ContentDecorator::begin([
'viewFile' => '@app/views/decorators/quote.php',
'view' => $this,
'params' => ['author' => 'S. Freud']
]
);?>
Time spent with cats is never wasted.
<?php ContentDecorator::end();?>
- 现在,你的Home页面应该会如下所示:
工作原理…
装饰器非常简单。ContentDecorator::begin()
和ContentDecorator::end()
之间的任何东西都会被渲染到一个$content
变量中,并传递到一个装饰器模板中。然后,这个装饰器模板被渲染,并被插入到ContentDecorator::end()
被调用的地方中。
我们可以使用ContentDecorator::begin()
第二个参数传递额外的变量到装饰器模板中,例如之前的例子中我们传递了author变量。
注意我们使用了@app/views/decorators/quote.php
作为视图路径。
参考
- http://www.yiiframework.com/doc-2.0/yii-widgets-contentdecorator.html提供了更多关于装饰器的详情
- 在一个视图中使用控制器上下文小节