您好,登錄后才能下訂單哦!
小編給大家分享一下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 App\Lisenter;use App\Events\Test;class TestLisenter { public function handle(Test $test) { var_dump($test->data); //打印:你好事件 }}
這個時候我們要創建, listen 對象來處理業務邏輯
laravel 有提供兩種方案:
在EventServiceProvider
添加$listen 數組信息比如:
/** * 應用程序的事件監聽器映射 * * @var array */protected $listen = [ 'App\Events\Test' => [ 'App\Listeners\TestListenter', ],];
讓系統自動處理,遍歷指定目錄
需要在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 App\Lisenter;use App\Events\Test;use Illuminate\Contracts\Queue\ShouldQueue;class TestLisenter implements ShouldQueue{ public function handle(Test $test) { var_dump($test->data); //打印:你好事件 }}
看完了這篇文章,相信你對“Laravel事件之異步處理的示例”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。