## 事件订阅
可以通过事件订阅机制,在一个监听器中监听多个事件,例如通过命令行生成一个事件订阅者类,
~~~
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
- 安装
- 自定义函数
- 任务类
- 带有日志的任务类