## 事件訂閱
可以通過事件訂閱機制,在一個監聽器中監聽多個事件,例如通過命令行生成一個事件訂閱者類,
~~~
php think make:subscribe SubscribeUser
~~~
默認會生成`app\subscribe\SubscribeUser`類。
然后你可以在事件訂閱類中添加不同事件的監聽方法。監聽事件的方法命名規范是`on`+事件標識(駝峰命名)。如果希望自定義訂閱方式(或者方法規范),可以定義`subscribe`方法實現。
~~~
<?php
namespace app\subscribe;
use think\Event;
class User
{
public function onUserLogin($user)
{
// UserLogin事件響應處理
print_r($user);
}
public function onUserLogout($user)
{
// UserLogout事件響應處理
print_r($user);
}
public function subscribe(Event $event)
{
$event->listen('UserLogin', [$this,'onUserLogin']);
$event->listen('UserLogout',[$this,'onUserLogout']);
}
}
~~~
然后在事件定義文件注冊事件訂閱者
~~~
return [
'bind' => [
// 更多事件綁定
],
'listen' => [
// 更多事件監聽
],
'subscribe' => [
'app\subscribe\User',
// 更多事件訂閱
],
];
~~~
最后在控制器中,就可以使用了.
~~~
<?php
declare (strict_types = 1);
namespace app\test\controller;
use think\facade\Event;
class User
{
public function login()
{
Event::trigger('UserLogin', ['name' => 'pat']);
}
public function logout()
{
Event::trigger('UserLogout', ['name' => 'pat']);
}
}
~~~
## 分離監聽事件
`php think make:listener UserLogin`
~~~
<?php
declare (strict_types = 1);
namespace app\listener;
class UserLogin
{
/**
* 事件監聽處理
*
* @return mixed
*/
public function handle($user)
{
print_r($user);
}
}
~~~
`php think make:listener UserLogout`
~~~
<?php
declare (strict_types = 1);
namespace app\listener;
class UserLogout
{
/**
* 事件監聽處理
*
* @return mixed
*/
public function handle($user)
{
print_r($user);
}
}
~~~
然后在事件定義文件注冊事件訂閱者
~~~
return [
'bind' => [
// 更多事件綁定
],
'listen' => [
// 此處多個傾聽者相當于下方的一個 subscribe, 相當于分文件編碼
'UserLogin' => ['app\listener\UserLogin'],
'UserLogout' => ['app\listener\UserLogout'],
// 更多事件監聽
],
'subscribe' => [
// 'app\subscribe\User',
// 更多事件訂閱
],
];
~~~
- 搭建ThinkPHP6的開發環境
- 配置ThinkPHP6
- 必要的基礎知識(basic)
- MVC開發模式
- 控制器(controller)
- 數據庫(database)
- 模型(model)
- 模型關聯(relation)
- 視圖(view)
- Session
- Cookie
- 緩存(cache)
- 上傳(upload)
- 驗證器(validate)
- 驗證碼(captcha)
- 命令行(command)
- 服務器部署(deploy)
- 數據備份(backup)
- 數據同步(synchronization)
- 訂閱服務(subscribe)
- PHP 易混淆知識點
- 助手函數
- MySQL規范
- Redis 規范
- office插件 phpoffice
- 拼音插件 pinyin
- 日期插件 datetime
- 消息插件 amqp
- 產品部署環境的搭建
- PDF 等雜項處理
- 文件上傳
- 常用擴展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 簡介
- 使用示例
- 使用示例 2 ②
- liliuwei/thinkphp-jump
- 擴展介紹
- 下載擴展
- 使用方法
- topthink/think-captcha
- 安裝擴展
- 驗證碼顯示
- 更換驗證碼
- 驗證碼校驗
- 驗證碼配置
- 自定義驗證碼
- phpoffice/phpspreadsheet
- 數據寫入表格
- 讀取表格數據
- topthink/think-queue
- 安裝
- 自定義函數
- 任務類
- 帶有日志的任務類