首頁 >php框架 >Laravel >關於 Laravel 事件&非同步處理

關於 Laravel 事件&非同步處理

藏色散人
藏色散人轉載
2020-12-29 09:20:113228瀏覽

產生事件

關於 Laravel 事件&非同步處理

#php aritsan make:event Test

事件與監聽listen 是一對多的管理,一個事件對應多個回應事件

定一個

$data

屬性,賦值觸發事件時傳遞的資料。
   public $data;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->data = $data;


    }

如何在業務中觸發? <pre class="brush:php;toolbar:false">   public function test(){        Test::dispatch('你好事件');    }</pre>

新增監聽者

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 事件&非同步處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除