> 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)类。
> * 设计成自包含的。最终开发人员应该能够将它设计到一个视图。
- 基础教程
- 入门安装
- Yii2 composer 安装慢解决
- Cookies
- 数据库操作
- 数据提供者
- 助手类
- 验证规则
- GridView
- DetailView
- YII2分页
- JS、CSS的引用
- Excel导出
- 中文转拼音
- 发送邮件
- 第三方插件
- Session跨域共享
- Url跨域访问
- 场景应用
- 查询条件链
- Session分布式共享
- Redis的使用
- mongodb
- 高级教程
- 自定义gii模板
- 角色权限管理(RBAC)
- user组件的配置
- 国际化(I18N)
- 小部件(Widget)
- 模块(Module)
- 行为(Behavior)
- 缓存(Cache)
- migrate 数据库迁移
- phpstorm
- 快捷键
- 自定义
- 其它插件