laravel里面使用event

模式:大概是通过一个自定义的event,一个handler,还有一个binder,然后用来简化通知模型

生成自定义的event

./artisan make:event MyEvent

生成自定义的handler

./artisan handler:event MyEventHandler --event=MyEvent

然后在EventServiceProvider里面添加,可以添加多个,演示就只注册一个了

protected $listen = [
        'AppEventsMyEvent' => [
            'AppHandlersEventsMyEventHandler',
        ],
    ];

如果你要多个handler,可以先在EventServiceProvider里面写好,然后命令

./artisan event:generate

触发event

$aaaa = 'sfsdfsdf';
$response = Event::fire(new AppEventsMyEvent($aaaa));

你会发现,在handler的handle方法被触发,不过看phpdoc,这个方法似乎是void返回,不知道这个response有什么用处

--------------------------------------------------------------------------------------------------------------------------------------------

注册event事件组

保留上面的MyEvent,别的不要了

注册我们的MyEventGroupHandler,这里演示一个event,subscribe方法必须定义

<?php namespace App;

class MyEventGroupHandler {

    /**
     * Handle user login events.
     */
    public function onMyEvent($event)
    {
        echo "MyEventGroupHandler";
        dd($event);
    }

    /**
     * Register the listeners for the subscriber.
     *
     * @param  IlluminateEventsDispatcher  $events
     * @return array
     */
    public function subscribe($events)
    {
        $events->listen('AppEventsMyEvent', 'AppMyEventGroupHandler@onMyEvent');
    }
}

动态注册监听event

$subscriber = new AppMyEventGroupHandler;
Event::subscribe($subscriber);

触发事件

$podcast = 'sfsdfsdf';
$response = Event::fire(new AppEventsMyEvent($podcast));

xdebug发现,MyEventGroupHandler的onMyEvent被断下

如果原来的myEventHandler也被注册,也能得到通知。

发现两种方式似乎没太大区别,一个静态注册,另一个动态注册,留着以后再说吧

原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/4274539.html