下面由laravel框架教程欄目給大家介紹Laravel 事件&異步處理,希望對需要的朋友有所幫助!
生成事件
事件和監聽 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