介绍
这篇文章主要介绍laravel事件的实现原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
简单使用
1。配置事件和监听器应用\ \ EventServiceProvider提供者的听属性
protected listen 美元;=,( ,,,,,,,& # 39;应用\ \ useradd # 39;事件,=祝辞,( ,,,,,,,,,,,& # 39;应用程序\听众\ UserAddListener& # 39; ,,,,,,,, ,,,,
2。生成对应的事件类和监听类文件,
php artisan 事件:生成
会生成应用\ \ UserAdd事件,应用程序\听众\ UserAddListener两个类文件。
事件类主要是保存对应的信息的作用,比如一个属性保存用户模型实例,事件类实例会传给对应的事件监听器的处理方法处理事件逻辑。
public function __construct (User $用户) { ,,这→美元user =, $ user;//创建事件实例时保存的信息 }
应用\听众\ UserAddListener监听器的处理方法就是处理逻辑的地方
public function 处理(UserAdd 事件美元) { ,,,,,,,dd(用户事件→美元);//获取到对应事件实例的信息 }
3。事件的触发,使用公共函数()事件。传入对应事件类的实例
事件(new 事件\ App \ \ UserAdd(用户)美元);//执行这一步时,就会执行到处理方法
实现原理(照亮\ \事件调度器类)
public function 注册() { ,,,这美元→程序→单例(& # 39;事件# 39;,,function (app)美元,{ ,,,,,,,return (new 分配器(app)美元)→setQueueResolver (function (), use (app), { ,,,,,,,,,,,return 应用程序→美元(QueueFactoryContract::类); ,,,,,,,}); ,,,}); }
注册到国际奥委会容器的事件其实是照亮\ \事件调度器类,也就是门事件其面实调用的是这个类的方法
重要属性和方法:
protected listeners 美元;=,[]; protected wildcards 美元;=,[]; protected wildcardsCache 美元;=,[];//这三个属性都是配置事件与监听器关系的数组,时间注册进来后就是放到对应的数组里面的。//这个方法就是注册事件用的,把配置好的事件注入到上面的属性中 public function 听(事件,美元,美元侦听器) ,,,{ ,,,,,,,foreach ((数组),events 美元;as 美元事件),{ ,,,,,,,,,,,if (Str:包含(事件,美元,& # 39;* & # 39;)),{ ,,,,,,,,,,,,,,,这个→美元setupWildcardListen(事件美元,,侦听器); ,,,,,,,,,,,},{else ,,,,,,,,,,,,,,,这个→美元听众($事件][],=,$ this→makeListener($侦听器); ,,,,,,,,,,,} ,,,,,,,} ,,,}//这个方法就是执行对应事件监听器的方法,找到事件下面的是所有监听器,然后执行。 public function 调度(事件,美元,美元payload =, [],, halt 美元;=,false),