ThinkPHP6 - Events
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP6 - Events相关的知识,希望对你有一定的参考价值。
内置应用事件
AppInit | 应用初始化标签位 | 无 |
HttpRun | 应用开始标签位 | 无 |
HttpEnd | 应用结束标签位 | 当前响应对象实例 |
LogWrite | 日志write方法标签位 | 当前写入的日志信息 |
RouteLoaded | 路由加载完成 | 无 |
LogRecord | 日志记录 | 无 |
内置模型事件
after_read | 查询后 |
before_insert | 新增前 |
after_insert | 新增后 |
before_update | 更新前 |
after_update | 更新后 |
before_write | 写入前 |
after_write | 写入后 |
before_delete | 删除前 |
after_delete | 删除后 |
事件创建
使用命令行
php think make:event MyEvent
会自动创建一个事件文件:/app/event/MyEvent.php
<?php
declare (strict_types = 1); //开启类型严格检查
namespace app\\event;
class MyEvent
//手动加上一个 handler 方法,事件调用时,用来处理事件逻辑
public function handle($user)
事件注册(绑定)
在 /app/event.php 中注册我们编写的事件,加入我们的事件:
return [
bind => [
//...
MyEvent => app\\event\\MyEvent
],
];
也可以使用动态注册
Event::bind([MyEvent => app\\event\\MyEvent]);
事件调用
两种方式:门面、函数助手
Event::trigger(UserLogin);
event(UserLogin);
事件监听
使用命令行创建监听器:
php think make:listener MyListener
会自动生成一个监听器文件:
<?php
declare (strict_types = 1);
namespace app\\listener;
class MyListener
/**
* 事件监听处理,不同于事件,该方法命令行已经为我们准备好了,我们需要实现里面的逻辑。
*
* @return mixed
*/
public function handle($event)
//监听的事件发生时,执行一些操作...
指定事件监听后的处理:
//使用监听器处理
Event::listen(MyEvent, app\\listener\\MyListener);
//如果逻辑简单,可以直接使用闭包处理,如果返回 false,则不再向后面的监听器传递
Event::listen(MyEvent, function($user)
//do something
);
//使用通配符监听多个事件
Event::listen(model.*, app\\listener\\ModelListen);
事件订阅
除了监听器,也可以用订阅器来处理事件,它可以轻松的处理多个事件
创建订阅者
php think make:subscribe MySubscribe
自动生成一个简单的订阅者文件,需要我们手动实现 subscribe 方法处理事件订阅
<?php
declare (strict_types = 1);
namespace app\\subscribe;
class MySubscribe
public function handleEvent1()
public function handleEvent2()
public function subscribe(Event $event)
$event->listen(Event1, [$this,handleEvent1]);
$event->listen(Event2, [$this,handleEvent2]);
注册订阅者:
在 /app/event.php 文件的 subscribe 属性数组中,加入我们的订阅者
subscribe => [
//...
app\\subscribe\\MySubscribe,
],
或者用动态注册
Event::subscribe(app\\subscribe\\User);
以上是关于ThinkPHP6 - Events的主要内容,如果未能解决你的问题,请参考以下文章