ThinkPHP6 - Events

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP6 - Events相关的知识,希望对你有一定的参考价值。


内置应用事件

AppInit

应用初始化标签位

HttpRun

应用开始标签位

HttpEnd

应用结束标签位

当前响应对象实例

LogWrite

日志write方法标签位

当前写入的日志信息

RouteLoaded

路由加载完成

LogRecord

日志记录​​V6.0.8+​

内置模型事件

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的主要内容,如果未能解决你的问题,请参考以下文章

Thinkphp6中间件引起验证码不显示?

thinkphp6速查手册

门面模式

thinkphp6----创建多模块

thinkphp6----创建多模块

Tomcat源代码-门面模式(Facade)