定一個$data
屬性,賦值觸發事件時傳遞的資料。
public $data; /** * Create a new event instance. * * @return void */ public function __construct($data) { $this->data = $data; }
如何在業務中觸發? <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> public function test(){
Test::dispatch('你好事件');
}</pre><div class="contentsignin">登入後複製</div></div>
namespace App\Lisenter;use App\Events\Test;class TestLisenter { public function handle(Test $test) { var_dump($test->data); //打印:你好事件 }}
#如何接受 “你好事件?」這時候我們要創建,listen 物件來處理業務邏輯
方案一:
在
EventServiceProvider/** * 应用程序的事件监听器映射 * * @var array */protected $listen = [ 'App\Events\Test' => [ 'App\Listeners\TestListenter', ],];
方案二:讓系統自動處理,遍歷指定目錄
/** * 确定是否应自动发现事件和侦听器 * * @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 ]; }
此時, 已經完成了事件的流程。如果沒有成功或想知道更多事件的處理,例如,延時佇列,判斷是否要加入事件,處理失敗之後的處理等等:參考文件
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 事件&非同步處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!