ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
> widget是可重复使用的客户端代码,它包含HTML,CSS 和 JS。此代码包含最少逻辑并被包装在一个 yii\base\Widget 对象。我们可以很容易地此对象插入到在任意视图中应用。 要创建一个窗口小部件,应该扩展类 yii\base\Widget。那么需要重写 yii\base\Widget::init() 和 yii\base\Widget::run() 函数。run()函数将返回渲染的结果。 init()函数将标准化小部件的属性。 [TOC] #### 第1步:在 components 文件夹内,创建一个名为 FirstWidget.php 文件,并使用下面的代码 ~~~ <?php namespace app\components; use yii\base\Widget; class FirstWidget extends Widget { public $mes; public function init() { parent::init(); if ($this->mes === null) { $this->mes = '第一个Widget'; } } public function run() { return "<h1>$this->mes</h1>"; } } ?> ~~~ #### 第2步: 按以下列方式修改 views/site/testwidget.php 视图 ~~~ <?php use app\components\FirstWidget; ?> <?= FirstWidget∷widget() ?> ~~~ #### 第3步 - 访问URL=> http://localhost:8080/index.php?r=site/test-widget ,将会看到以下内容输出。 ![](https://box.kancloud.cn/1058c01b9cdfe10379863091d6f41f65_689x380.png) #### 第4步- 要在 begin() 和 end() 函数之间调用显示内容,您应该修改 FirstWidget 文件。 ~~~ <?php namespace app\components; use yii\base\Widget; class FirstWidget extends Widget { public function init() { parent::init(); ob_start(); } public function run() { $content = ob_get_clean(); return "<h1>$content</h1>"; } } ?> ~~~ #### 第5步 - 现在H1标签将环绕的所有内容。请注意,我们使用 ob_start()函数来缓冲输出。修改 views/site/testwidget.php 视图使用如下面给出的代码。 ~~~ <?php use app\components\FirstWidget; ?> <?php FirstWidget::begin(); ?> 第一个Widget在H1标签中 <?php FirstWidget::end(); ?> ~~~ 将会看到下面的输出 - ![](https://box.kancloud.cn/1058c01b9cdfe10379863091d6f41f65_689x380.png) ## 要点 > 窗口小部件应该 - > * 要在MVC模式下创建。应该保持表现层在视图,逻辑在窗口小部件(widget)类。 > * 设计成自包含的。最终开发人员应该能够将它设计到一个视图。