laravel里面使用event

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

 

生成自定义的event

./artisan make:event MyEvent

 

生成自定义的handler

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

 

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

protected $listen = [
        'App\Events\MyEvent' => [
            'App\Handlers\Events\MyEventHandler',
        ],
    ];

 

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

./artisan event:generate

 

触发event

$aaaa = 'sfsdfsdf';
$response = Event::fire(new App\Events\MyEvent($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  Illuminate\Events\Dispatcher  $events
     * @return array
     */
    public function subscribe($events)
    {
        $events->listen('App\Events\MyEvent', 'App\MyEventGroupHandler@onMyEvent');
    }
}

 

动态注册监听event

$subscriber = new App\MyEventGroupHandler;
Event::subscribe($subscriber);

 

触发事件

$podcast = 'sfsdfsdf';
$response = Event::fire(new App\Events\MyEvent($podcast));

 

xdebug发现,MyEventGroupHandler的onMyEvent被断下

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

 

 

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

你可能感兴趣的:(laravel)