请选择 进入手机版 | 继续访问电脑版
收起左侧

tp6-事件

[复制链接]

552

主题

569

帖子

1万

积分

管理员

站长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
16427

灌水之王

QQ
发表于 2020-2-7 13:55:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
花了几个小时



里面最重要的三个概念:
1、定义事件
    定义要执行的事件
    定义一个事件的代码是:
   
[PHP] 纯文本查看 复制代码
Event::trigger('UserLogin');
   助手函数
   
[PHP] 纯文本查看 复制代码
event('UserLogin');
两个效果一致



2、事件监听
    一个监听文件  监听一个监听事件
    使用
[PHP] 纯文本查看 复制代码
php think make:listener UserLogin
   命令创建一个监听类  用来执行定义的监听方法,也可以手动在app\listener 下创建一个UserLogin.php 文件 内容如下:
   
[PHP] 纯文本查看 复制代码
<?php
declare (strict_types = 1);

namespace app\listener;

class UserLogin
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
    {
        echo "UserLogin headle <br />";
        //
    }

}
内容输出:
[PHP] 纯文本查看 复制代码
UserLogin headle


带参数的事件监听
[PHP] 纯文本查看 复制代码
Event::trigger('UserLogin', 'test');


监听类中:
[PHP] 纯文本查看 复制代码
public function handle($event)
    {
        echo "UserLogin headle <br />";
        dump($event);
    }

第一个参数 event 就是定义时传的参数
event.php 中:
[PHP] 纯文本查看 复制代码
<?php
// 事件定义文件
return [
    'bind'      => [
    ],

    'listen'    => [
        'AppInit'  => [],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
        'OrderCreate'   => [],
        'UserLogin' =>  [app\listener\UserLogin::class]  // 定义处理的类
    ],

    'subscribe' => [
    ],
];

结果:


3、事件订阅
    一个订阅文件,可以监听多个事件
    先创建一个订阅文件:
    不需要创建定义文件和事件类
   通过命令或者直接创建 app\subscribe\User.php :
[PHP] 纯文本查看 复制代码
<?php
declare (strict_types = 1);

namespace app\subscribe;

class User{
}


通过命令创建:
[PHP] 纯文本查看 复制代码
php think make:subscribe User


User.php 内容:
[PHP] 纯文本查看 复制代码
<?php
declare (strict_types = 1);

namespace app\subscribe;

class User
{

    public function onUserLogin()
    {
        echo 'UserLogin';
    }

}


在event.php 中代码:
[PHP] 纯文本查看 复制代码
<?php
// 事件定义文件
return [
    'bind'      => [
    ],

    'listen'    => [
        'AppInit'  => [],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
        'OrderCreate'   => [],
        'UserLogin' =>  []
    ],

    'subscribe' => [
        app\subscribe\User::class
    ],
];

这时 listen中的UserLogin 就不用写命名空间了

在说明时间后
[PHP] 纯文本查看 复制代码
app\subscribe\User

下的 onUserLogin 就会执行
使用on + 标识 访问,

统一时间前缀






QQ:2424004764
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|客户端下载|先锋者IT论坛 ( 湘ICP备16007032号湘公网安备 43030202001052号

GMT+8, 2024-3-29 09:13 , Processed in 0.090376 second(s), 14 queries , File On.

Powered by Discuz! X3.3

© 2017 bbs.fologde.com. Template By Gstudio

快速回复 返回顶部 返回列表