## Yii2事件
**[事件](http://www.yiichina.com/doc/guide/2.0/concept-events)**可以将自定义代码“注入”到现有代码中的特定执行点。附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行。
例如,邮件程序对象成功发出消息时可触发 `messageSend` 事件。如想追踪成功发送的消息,可以附加相应追踪代码到 `messageSend` 事件。
Yii 引入了名为 `yii\base\Component` 的基类以支持事件。如果一个类需要触发事件就应该继承 `yii\base\Component` 或其子类。
### 事件处理器
事件处理器是一个[PHP 回调函数](http://www.php.net/manual/en/language.types.callable.php),当它所附加到的事件被触发时它就会执行。可以使用以下回调函数之一:
* 对象名和方法名数组形式指定的对象方法,如 `[$object, $method]` ;
```
use app\events\MessageEvent;
...
const EVENT_HELLO = 'sayHello';
public function actionIndex()
{
$event = new MessageEvent;
$event->message = 'new message from actionIndex method';
$this->on(self::EVENT_HELLO,[$event,'hello']);
$this->trigger(self::EVENT_HELLO,$event); // 打印 new message from actionIndex method
}
```
其中`app\events\MessageEvent`类代码很简单,如下:
```
<?php
namespace app\events;
use yii\base\Event;
use Yii;
class MessageEvent extends Event
{
public $message;
public function hello($event)
{
echo $event->message;
}
}
```
* 类名和方法名数组形式指定的**静态类方法**,如 `[$class, $method]` ;
```
use app\events\MessageEvent;
...
const EVENT_HELLO = 'sayHello';
public function actionIndex()
{
$event = new MessageEvent;
$event->message = 'new message from actionIndex method';
$this->on(self::EVENT_HELLO,['app\events\MessageEvent','hello']);
$this->trigger(self::EVENT_HELLO,$event);
}
```
其中`app\events\MessageEvent`类代码很简单,如下:
```
<?php
namespace app\events;
use yii\base\Event;
use Yii;
class MessageEvent extends Event
{
public $message;
static public function hello($event)
{
echo $event->message;
}
}
```
* 匿名函数,如 `function ($event) { ... }` 。
```
const EVENT_HELLO = 'sayHello';
public function actionIndex()
{
$this->on(self::EVENT_HELLO,function ($event){ // 绑定一个Event事件
foreach ($event->data as $data){
echo strtoupper($data),PHP_EOL;
}
}, ['abc','dev']);
$this->trigger(self::EVENT_HELLO); // 触发事件 得到结果:ABC DEV
}
```
- 开始
- Yii2开发小技巧
- Yii2使用不同的方式进行邮件发送逻辑处理
- Yii2 Serialization of 'Closure' is not allowed 错误
- Yii创建应用
- Yii应用结构和流程
- Yii的路径别名
- Yii的请求
- Yii的响应
- Sessions 和 Cookies
- Yii自定义全局工具函数
- Yii2模型
- Yii2视图
- Yii2控制器
- 大数据节省内存处理
- 关联查询hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后台主题
- Yii2模型中的场景
- Yii2中的RBAC
- Yii2项目后台整合yii2-admin模块
- RBAC集成AdminLTE后台主题对菜单进行控制
- Yii2自定义Gii模板
- 修复AdminLTE引用外部字体文件导致访问变慢的情况
- Yii2事件简单使用
- Yii2模型事件
- Yii2使用GridView新增操作按钮
- Yii2向loyout模板文件中传值
- Yii2数据缓存
- Yii2缓存
- Yii2数据缓存之增删改查
- Yii2拓展
- Yii2日期时间插件-datetimepicker
- kartik-v/yii2-widget-fileinput上传插件