当前位置: 首页 > wzjs >正文

富阳区建设局网站首页在线做的网站

富阳区建设局网站首页,在线做的网站,网络文化经营许可证经营范围,广告公司标志首先知道事件是什么 1.事件的概念 事件(Event)是 Laravel 中实现观察者模式的一种机制,它允许应用程序中的不同部分进行松耦合的通信。 通俗一点就是,发生在应用程序中的动作或者事情。例如: 用户注册成功后,需要发邮件&#…

首先知道事件是什么

1.事件的概念

事件(Event)是 Laravel 中实现观察者模式的一种机制,它允许应用程序中的不同部分进行松耦合的通信。

通俗一点就是,发生在应用程序中的动作或者事情。例如:

  1. 用户注册成功后,需要发邮件,发短信,初始化数据;
  2. 订单支付成功后,库存处理,消息发送,订单处理;
  3. 文章发布成功后,用户的积分,通知审核者,推送阅读者;
  4. 。。。。

类似以上这些动作或事情,都可以看着一个个单独的事件。

2.事件组成部分

  1. 事件类(Event):承载事件相关数据的对象

  2. 事件触发:在代码中明确触发事件的位置

  3. 监听器(Listener):响应事件并执行处理的类

3.怎么工作

触发事件 -> 创建事件对象 -> 事件分发器 -> 匹配监听器 -> 执行监听器逻辑

4.事件特点

  1. 解耦性:将某些动作和主体功能的逻辑拆分,例如将用户注册和发邮件拆分开,用户注册后,直接触发邮件事件。根本不需要知道怎么发邮件的。两个互不影响。
  2. 可扩展性:一个事件支持多个监听器,例如用户注册成功后,原有一个监听器去发邮件,如果现在有个发短信的需求,直接添加一个新的监听器即可,不需要去修改原有的代码。减少出错率
  3. 队列支持:监听器可以同步执行,也可以异步执行。例如发邮件,处理大量的耗时任务,可以直接在异步里面执行,不影响主体功能

数据状态变更 事件开发

1.创建事件

使用 Artisan 命令创建一个新事件:

php artisan make:event MyCustomState

php artisan make:event MyCustomState
app/Events 目录下会自动生成一个事件类。编辑一下

<?phpnamespace App\Events;use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;class MyCustomState
{use Dispatchable, SerializesModels;public $data;/*** 创建一个新的事件实例** @param mixed $data 需要传递的数据* @return void*/public function __construct($data){$this->data = $data;}
}

__construct里面进行赋值处理 $this->data = $data;

2.创建监听器

使用命令行创建监听器

 php artisan make:listener ProcessMyCustomState --event=MyCustomState

php artisan make:listener ProcessMyCustomState --event=MyCustomState
编辑监听器文件 app/Listeners/ProcessMyCustomState .php:

注意,处理这个事件的逻辑就在监听器里面实现。例如发短信,发邮件,等等

<?phpnamespace App\Listeners;use App\Events\MyCustomState;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;class ProcessMyCustomState 
{/*** 处理事件** @param MyCustomEvent $event* @return void*/public function handle(MyCustomState $event){//接收事件的数据$data = $event->data;// 例如:记录日志、发送邮件、处理数据等\Log::info('事件已处理,数据:', ['data' => $data]);// 自我表现的时候到了,开始肆无忌惮的搭建屎山工程// ........}
}

3.注册事件和监听器

目前事件和监听器是两个独立的类,接下来要让监听器监听事件。也就是所谓的注册对应关系

编辑 app/Providers/EventServiceProvider.php 添加以下代码

protected $listen = [MyCustomState::class => [ProcessMyCustomState::class,],
];

请注意

MyCustomState::class 对应的是一个数组,也就是里面可以有多个监听器,即多个监听器监听一个事件

例如发短信,发邮件,等等。每个独立实现可以为一个监听器

这样就建立关系了。接下来只需要去触发这个事件即可

4.在控制器中触发事件

编辑一个控制器文件

<?phpnamespace App\Http\Controllers;use App\Events\MyCustomEvent;
use Illuminate\Http\Request;class MyController extends Controller
{public function triggerEvent(Request $request){// 一些业务逻辑...$eventData = ['user_id' => auth()->id(),'action' => 'custom_action','timestamp' => now(),];// 触发事件event(new MyCustomState($eventData));// 或者也可以使用辅助函数// MyCustomState::dispatch($eventData);return response()->json(['message' => '事件已触发']);}
}

可以用 event(new MyCustomState($eventData)); 或者 MyCustomState::dispatch($eventData); 触发事件

以上就是正常一个事件的开发流程了。

如果监听器的逻辑较为复杂或者非常耗时,那么建议这个监听器进行异步执行。可以让监听器实现 ShouldQueue 接口

5.监听器队列处理(视情况而定)

简单说一下,什么情况使用队列监听器

  1. 耗时操作:发送邮件、生成报表、处理图片等

  2. 第三方API调用:支付网关、短信服务等

  3. 非关键操作:日志记录、数据分析等不需要即时完成的操作

  4. 高流量场景:需要快速响应用户而不等待后台处理完成

监听器实现 ShouldQueue 接口
use Illuminate\Contracts\Queue\ShouldQueue;class ProcessMyCustomState implements ShouldQueue
{use InteractsWithQueue;// 指定队列连接public $connection = 'ProcessMyCustomStateQueue';// 指定队列名称public $queue = 'emails';// 延迟处理(秒)public $delay = 60;// 最大尝试次数public $tries = 3;// 超时时间(秒)public $timeout = 30;public function handle(MyCustomEvent $event){// 处理事件逻辑$data = $event->data;// 例如:记录日志、发送邮件、处理数据等\Log::info('事件已处理,数据:', ['data' => $data]);// 此处就是异步处理的逻辑// .....}
}
运行队列进程

如果使用队列,那么就必须运行队列的进程,这样才能及时处理到监听器的逻辑。

如果对队列不熟悉的同学,我后面会写一篇关于队列的文章,让大家学习一下

命令行启动队列

php artisan queue:work  --queue=ProcessMyCustomStateQueue

启动后,当事件触发时,命令行会显示进程处理日志
php artisan queue:work  --queue=ProcessMyCustomStateQueue

总结

这就是在 Laravel 中实现事件和监听器的完整流程。

这种模式有助于解耦代码,使得业务逻辑更加清晰,也便于后期维护和扩展。

你可以根据需要创建多个监听器来监听同一个事件,或者为事件添加更多的属性和方法。


文章转载自:

http://xJMRMuft.rckdq.cn
http://DnWGg1cm.rckdq.cn
http://ax8TEzkW.rckdq.cn
http://4PIQ1jg5.rckdq.cn
http://xLIAOCON.rckdq.cn
http://E5KJhtB0.rckdq.cn
http://vm127oh2.rckdq.cn
http://BAXHQMfD.rckdq.cn
http://qfnk5pHa.rckdq.cn
http://VrcttMTj.rckdq.cn
http://bSK9eI9W.rckdq.cn
http://4lztQuLd.rckdq.cn
http://00KNAWoN.rckdq.cn
http://PsvTgsAr.rckdq.cn
http://brIOsT9i.rckdq.cn
http://jO1OoMfI.rckdq.cn
http://rXUwMQf5.rckdq.cn
http://p60a9LxP.rckdq.cn
http://EKcgFOoS.rckdq.cn
http://qaolXI1f.rckdq.cn
http://On0gXQlb.rckdq.cn
http://iajvBXU5.rckdq.cn
http://MaNMu4kZ.rckdq.cn
http://p9nbq8D0.rckdq.cn
http://GN1QIM0n.rckdq.cn
http://IsUoy9xO.rckdq.cn
http://ZetO6hFc.rckdq.cn
http://aqRkRIAH.rckdq.cn
http://CsZjuPjl.rckdq.cn
http://kEZA2g6Q.rckdq.cn
http://www.dtcms.com/wzjs/680027.html

相关文章:

  • 关于网站建设的建议高端网站搭建
  • 怎么联系百度推广长春网站推广优化公司
  • 建设银行激活网站网站建设企业的未来发展计划
  • 自己如何做简单网站网站管理cms
  • 农村建设自己的网站首页360免费wifi连不上
  • 唐山的做网站的企业wordpress怎么升级
  • mvc中手把手做网站山东省城乡与住房建设厅网站首页
  • 生产管理网站开发网站是如何建立的呢
  • 深圳营销外贸网站制作网站开发 activex
  • 贺州市八步区建设局网站网站主办者是什么意思
  • 响应式网站的设计尺寸做网站上传那个目录
  • 射阳网站开发wordpress内容类型
  • 找外包公司做网站价钱代加工订单
  • 怎样建设邮箱网站网站设计风格的关键词
  • 网站模版免费下载深圳公众号开发公司
  • 350做网站深圳手机自己做网站
  • 网站设计 网站建设 手机网站建设深圳网站制作公司售后
  • dw中怎样做网站二级页面特价网站建设价格低
  • 郑州工程建设信息网站赣州人才网招聘信息
  • 宁德网站建设国家企业信用信息没有网站怎么做
  • 网站开发工期安排表多语言网站建设
  • 班级网站页面设计营销是什么意思
  • 可以看那种东西的手机浏览器科学新概念seo外链
  • 成都市公园城市建设局网站酒店营销策划与运营
  • 图书网页设计网站上海华讯网络公司排名
  • 制作一个静态网站的步骤做微信投票的网站
  • js网站模板怎么用wordpress配置数据库失败
  • 做网站需要什么图片网站制作优势
  • 网站屏蔽国内ip用动易做的诗歌协会网站
  • 帝国cms 网站地图 xml自己做网络推广怎么做