1. 程式人生 > >laravel 事件機制 實踐總結

laravel 事件機制 實踐總結

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));