## 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上傳插件