TP6 事件
官方文档中的代码实测有误
return [
'bind' => [
'UserLogin' => 'app\event\UserLogin',
// 更多事件绑定
],
'listen' => [
'UserLogin' => ['app\listener\UserLogin'],
// 更多事件监听
],
];
实际表现应该是
return [
'bind' => [
'ul' => 'UserLogin',
// 更多事件绑定
],
'listen' => [
'UserLogin' => ['app\listener\UserLogin'],
// 更多事件监听
],
];
这样使用
Event::trigger('UserLogin');
或者
Event::trigger('ul');
或者
event('UserLogin');
或者
event('ul');
都能够生效,也就是说,event.php 中的 bind 配置实质上起到的是一个别名的功能,直接不配置也不会影响使用
使用一个事件标识,触发多个后续流程,订阅方法:
在AppService.php中注册多个订阅类
public function register()
{
// 服务注册
Event::subscribe('app\index\subscribe\Animal');
Event::subscribe('app\index\subscribe\User');
}
创建对应的订阅类 Animal
<?php
declare (strict_types = 1);
namespace app\index\subscribe;
use think\Event;
class Animal
{
public function onLogin($user)
{
echo "Animal onLogin<br>";
}
}
创建对应的订阅类 User
<?php
declare (strict_types = 1);
namespace app\index\subscribe;
use think\Event;
class User
{
// protected $eventPrefix = 'User';
public function onLogin($user)
{
// UserLogin事件响应处理
echo "User onLogin<br>";
}
}
使用事件标识触发事件
public function index()
{
Event::trigger('Login');
echo "index/index/index";
}
就能得到:
Animal onLogin
User onLogin
index/index/index
使用一个事件标识,触发多个后续流程,监听方法:
在AppService.php中注册多个订阅类
public function register()
{
// 服务注册
Event::listen('AnimalListener', 'app\index\listener\Cat');
Event::listen('AnimalListener', 'app\index\listener\Dog');
}
创建对应的监听类 Cat
<?php
declare (strict_types = 1);
namespace app\index\listener;
class Cat
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
echo "cat handle<br>";
}
}
创建对应的监听类 Dog
<?php
declare (strict_types = 1);
namespace app\index\listener;
class Dog
{
/**
* 事件监听处理
*
* @return mixed
*/
public function handle($event)
{
echo "dog handle<br>";
}
}
使用事件标识触发事件
public function index()
{
Event::trigger('AnimalListener');
echo "index/index/index";
}
就能得到:
cat handle
dog handle
index/index/index
或者直接在event.php直接配置好,就不需要在AppService中动态注册
<?php
// 事件定义文件
return [
'bind' => [
],
'listen' => [
'AppInit' => [],
'HttpRun' => [],
'HttpEnd' => [],
'LogLevel' => [],
'LogWrite' => [],
'AnimalListener' => [
'app\index\listener\Cat',
'app\index\listener\Dog'
]
],
'subscribe' => [
],
];
使用事件标识触发事件
public function index()
{
Event::trigger('AnimalListener');
echo "index/index/index";
}
也能得到:
cat handle
dog handle
index/index/index