首頁 > php框架 > Laravel > 主體

關於 Laravel 事件&非同步處理

藏色散人
發布: 2020-12-29 09:20:11
轉載
3206 人瀏覽過

產生事件

關於 Laravel 事件&非同步處理

#php aritsan make:event Test

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

定一個

$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>

新增監聽者

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板