Laravel event 事件使用中 记录的一个小问题

laravel事件监听使用大概分为以下步骤:
① 注册事件和事件监听器
② 生成事件文件和事件监听器文件
③ 定义事件
④ 定义事件监听器
⑤ 分发事件(调用事件)
一般基础的事件操作就是分为上面5个步骤,在5.5中文手册上面也有详细说明,但是可能对一些刚接触事件的新手来说可能有些地方不太容易理解甚至会有点疑惑,比如说我我就是这样的菜鸟.所以记录下自己一个小小的理解,希望对其他人有帮助

1. 注册事件和事件监听器

在我们使用事件之前,首先应该先去 app/Providers/目录下打开EventServiceProvider.php文件之后我们会看到下图的一个数组
file
数组 $listen 是用来注册我们的事件和事件监听器的一个数组,其中数组的键为我们需要定义的事件,值对应的为我们需要定义的事件监听器,
比如我这里,需要注册的
事件为:Login 指定路径为 App\Events\Login (处理登录的一个事件)
事件监听器为:LoginListener 指定路径为 App\Listeners\LoginListener(监听登录事件的监听器)
我们需要把指定路径对应上图,增加到数组中,
此时我们已经注册好了事件和监听器

2.生成事件文件和事件监听器文件

事件文件存放在 app/Events 目录下 监听器 存放在 app/Listeners 目录下 此时我们虽然定义好了监听器,但是对应文件并不存在,我们需要使用 laravel 的 artisan 命令 来在指定目录下生成 事件文件 Login 和 事件监听 LoginListener 文件
php artisan event:generate
. 文件生成之后,下面开始定义事件

3. 定义事件

打开 app/Events 目录下的 Login.php 事件文件,如下图有个结构函数
file
当我们在调用事件的时候我们有时候需要,给事件传递参数,这个参数可能是个 ORM 模型 也可能是个数据集 或者是个字符串,此时如果我们希望事件能够接收到我们传递的参数,就需要在 construct() 结构函数中来 定义接收,有两种方法:
第一种
我们使用依赖注入的方式定义接收的参数(文档中便是此方法),假如我们接收的参数为Eloquent ORM 对象 User 则我们需要在事件中 引入 User 模型,然后在 construct()指定依赖 如下图:
file

file
在定义完接收对象之后,还需要定义一个 pubic 属性 然后将接收的参数赋值给这个public 属性,以便于 事件监听 程序调用 我们这里定义为 public $eloquent 如下图:
file
第二种
使用普通的参数接收方式,直接在construct()函数中指定一个参数用来接收调用事件传递的参数,这种就和我们正常函数传参相同,同样我们需要定义一个 公有属性,将参数赋值给这个公有属性,这里仍然使用 public $eloquent
如下图
file
以上我们,可以通过两种方式来定义事件的接收

4. 定义事件监听器

打开 app/Listeners 目录下的 LoginListener.php 事件文件,在事件监听文件中有个handle函数用来处理我们的业务逻辑
如下图:

file
根据业务需求,在handle中写需求逻辑即可 $event 为之前事件 Login 依赖注入的对象,下面使用 dd($event)打印数据结构,这里我们暂时还不能看到,在下面 说明事件分发(事件调用) 的时候会为大家展示 因为我们 定义事件 时有两种方法
所以打印出来结果会不同
file

5.分发事件(调用事件)

上面我们都定义好之后在我们业务需要的地方执行分发事件(调用事件) 使用 event(new 事件名(参数)) 来执行事件分发(事件调用)
注意: 如果我们定义事件的时候使用的是依赖注入的方式来传递参数,那么我们在分发事件的时候 只能传递我们指定的依赖,否则会报错,例如我们上面使用的 User $user 依赖 则在调用事件的时候 我们只能在我们的控制器中 传递 模型 User 的 ORM模型如下图:
file
file
当我们登录成功调用事件的时候,就会打印出对象集如下图
file
当我们使用第二种方法来定义事件的接收时,我们在调用事件时,传递的参数就会没有限制了 我们可以根据需要传递不同的参数到事件中去,然后在事件监听中 根据业务需求来获取参数处理业务逻辑
比如当我使用第二种方式定义事件,我调用事件的时候传递一个数组,和登录成功时,事件打印结果如下图
执行事件
file
打印结果
file
以上便是两种定义方式的,两种事件调用方式

6.补充

在事件监听的handel()方法中通过 $event对象获取参数 例如 打印结果 如下图
file
则调用获取数组的方法为 $event->对应参数名 在这里即为 $event->eloquent 如下图
file
打印结果为:
file

以上便是个人队event事件基础使用的简单一个总结,其中在使用依赖的方式时时本人踩得一个小坑所以记录下来,
本人小白一枚刚学习laravel没多久,有写的不对的地方欢迎各位大神指点

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!