您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

laravel 5.1 events

2024/6/28 12:22:41发布32次查看
laravel events
今天研究了一下laravel的事件驱动,发现使用起来非常方便,来来~一起嗨起来~.
这里只介绍一些简单的使用方法~ 队列驱动以及广播分发以后使用到了再研究
简介 laravel的events提供了一些简单的观察者类实践,允许我们注册一些事件,并且允许我们注册一些事件监听者去监听这些事件,
当我们触发某些事件时,相应的监听者将会触发handle方法。在这里我们可以处理一些相应的业务逻辑。
注册 laravel 提供了便利的生成事件注册与事件监听者注册的机制,允许我们通过eventserviceprovider类中以键值对的形式注册事件及事件监听者:
/** * the event listener mappings for the application. * * @var array */ protected $listen = [ 'app\events\userloginevent' => [ 'app\listeners\userlogineventlistener', ], 'app\events\managercreateevent'=>[ 'app\listeners\managercreateeventlistener', 'app\listeners\someothereventlistener', ] ];
上面的代码注册了名为userloginevent的事件及名为userlogineventlistener的userloginevent事件监听者,managercreateevent事件,监听managercreateevent事件的两个监听者:managercreateeventlistener and someothereventlistener
ok,这样我们就已经完成了基本的事件及监听者的注册,但是还没有对类进行开发,让我们来通过强大的artisan 进行生成:
php artisan event:generate
通过命令会生成相应已注册的类到相应的文件中,event会生成在app\events目录中,listener会生成在app\listeners中
这样会发现如下的目录结构信息:
app\ events\ userloginevent.php managercreateevent.php listeners\ managercreateeventlistener.php someothereventlistener.php # 比如邮件推送
在生成的事件类中,我们可以在__constrcut构造函数中注入相应的依赖,也可以在其中做一些业务处理,当触发事件类时,即__constrct完成后,相应的监听者将会按顺序的触发handle函数
触发 触发事件的方法很简单,在你需要触发相应事件的地方进行触发操作就行了
event::fire(new managercreateevent($manager)); # or event(new managercreateevent($manager));
事件触发的顺序是这样的:
managercreateevent: __construct managercreateeventlistener: handle someothereventlistener: handle
这个过程中是可以终止监听的 比如说 在managercreateeventlistener的handle方法中 return false ; 下序的someothereventlistener将不再触发监听操作。
subscribe 关注/订阅 事件 laravel的subscribe机制允许我们在事件监听者自身类中监听多个事件,只要我们在监听者类中实现了subscribe方法,例如:
phpclass usereventhandler { /** * 处理用户登录事件。 */ public function onuserlogin($event) { // } /** * 处理用户注销事件。 */ public function onuserlogout($event) { // } /** * 注册监听器给订阅者。 * * @param illuminate\events\dispatcher $events * @return array */ public function subscribe($events) { $events->listen('app\events\userloggedin', 'usereventhandler@onuserlogin'); $events->listen('app\events\userloggedout', 'usereventhandler@onuserlogout'); }}
上面的usereventhandle类监听了两个不同的事件类userloggedin和userloggedout,当触发userloggendin或者userloggedout时,会自动触发相应的监听方法。
只定义类和监听方法还是不行的,我们需要告诉系统我们需要注册subscribe形式的监听,在eventserviceprovider中添加:
protected $subscribe = [ 'app\handlers\events\usereventhandler', ];
执行顺序,laravel会优先执行listen中的事件监听者,而后执行subscribe方式的监听者
^_^
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product