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也被注冊,也能得到通知。

 

 

發現兩種方式似乎沒太大區別,一個靜態注冊,另一個動態注冊,留着以后再說吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM