laravel 事件機制 實踐總結
阿新 • • 發佈:2018-12-26
laravel 事件機制 實踐總結
觀察者模式
- 在EventServiceProvider的linsten數組裡面加上事件和監聽器,鍵名是事件,鍵值裡面的陣列是一個或者多個監聽器,
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
'App\Events\SendPhoneCodeEvent' => [
'App\Listeners\SendPhoneCodeListener',
],
];
- 生成監聽和事件檔案 php artisan event:generate
- 編輯Event類
- 可以新增屬性來傳遞資料,新增方法來傳遞迴調
- 編輯Listener類
- 在handle方法中編輯監聽邏輯
- 觸發事件 呼叫全域性函式event(),傳入事件物件;
- event(new SendPhoneCodeEvent($data));
釋出訂閱模式
- 編輯訂閱類 ,實質就是一個排程中心
<?php
/**
* Created by PhpStorm.
* User: liutengfei
* Date: 2018/12/25
* Time: 18:45
*/
namespace App\Listeners;
use App\Events\SomeEvent;
use App\Events\TestEvent;
class TaskToLogListener
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
public function someEventTask(SomeEvent $event)
{
echo 'uuuu'."\n" ;
}
public function testEventTask(TestEvent $event)
{
echo 'iiioo'."\n";
}
//這裡是訂閱中心,這裡既可以呼叫自己,也可以分發到其他監聽者
public function subscribe($events)
{
$events->listen('App\Events\SomeEvent','App\Listeners\ [email protected]');
$events->listen('App\Events\TestEvent','App\Listeners\[email protected]');
$events->listen('App\Events\TestEvent','App\Listeners\[email protected]');
}
}
- 在EventServiceProvider新增屬性$subscribe
- protected $subscribe = [TaskToLogListener::class];
- 觸發事件
Event::fire(new TaskAdded($task));
Event::fire(new TaskDeled($task));