關于 Laravel 事件&異步處理

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

下面由laravel框架教程欄目給大家介紹Laravel 事件&異步處理,希望對需要的朋友有所幫助!

關于 Laravel 事件&異步處理

生成事件

php aritsan make:Event Test

事件和監聽 listen 是一對多的管理,一個事件對應多個響應事件

定一個$data 屬性,賦值觸發事件時傳遞的數據。

   public $data;     /**      * Create a new event instance.      *      * @return void      */     public function __construct($data)     {         $this->data = $data;       }

如何在業務中觸發?

   public function test(){        Test::dispatch('你好事件');    }

添加監聽者

php artisan make:listener TestLisenter

namespace AppLisenter;use AppEventsTest;class TestLisenter {     public function handle(Test $test)     {         var_dump($test->data);         //打印:你好事件     }}

如何接受 ?“你好事件?”

這個時候我們要創建, listen 對象來處理業務邏輯

laravel 有提供兩種方案:

方案一:

在EventServiceProvider 添加$listen 數組信息比如:

/**  * 應用程序的事件監聽器映射  *  * @var array  */protected $listen = [     'AppEventsTest' => [         'AppListenersTestListenter',     ],];
方案二:

讓系統自動處理,遍歷指定目錄
需要在EventServiceProvider ?添加:

/**  * 確定是否應自動發現事件和偵聽器  *  * @return bool  */public function shouldDiscoverEvents(){     return true;}
/**  * 獲取應該用于發現事件的監聽器的目錄  *  * @return array  */   protected function discoverEventsWithin()     {         return [             $this->app->path('Lisenter'),//事件關聯的監聽器目錄APP/Lisenters             $this->app->path('Lisenter/test'),//事件關聯的監聽器目錄APP/Lisenters/test         ];     }

系統會自動的匹配Listen

此時, 已經完成了事件的流程。如果沒有成功或者想知道更多事件的處理,比如,延時隊列,判斷是否要加入事件,處理失敗之后的處理等等:參考文檔

事件的隊列處理

如果沒有接觸laravel 的隊列的小伙伴,先參考: Laravel Jobs

只需要在 TestLisenter 實現 ShouldQueue 的接口即可

長這樣:

namespace AppLisenter;use AppEventsTest;use IlluminateContractsQueueShouldQueue;class TestLisenter implements ShouldQueue{     public function handle(Test $test)     {         var_dump($test->data);         //打印:你好事件     }}

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享