91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用laravel怎么實現一個事件監聽器

發布時間:2021-06-11 18:25:32 來源:億速云 閱讀:369 作者:Leah 欄目:開發技術

這篇文章給大家介紹使用laravel怎么實現一個事件監聽器,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

事件/監聽器

Laravel 事件提供了簡單的觀察者模式實現,允許你訂閱和監聽應用中的事件。

觀察者模式有時也被稱作發布/訂閱模式,該模式用于為對象實現發布/訂閱功能:一旦主體對象狀態發生改變,與之關聯的觀察者對象會收到通知,并進行相應操作。

以上是事件/監聽器、觀察者模式的簡要說明。結合這次的需求理解,當觸發用戶訪問事件,它的觀察者進行處理。觀察者可以是多個,本例僅做入庫操作。

創建事件/監聽器

在 app/Providers/EventServiceProvider.php 文件中添加事件/監聽器,如下

 /**
   * The event listener mappings for the application.
   *
   * @var array
   */
  protected $listen = [
    Registered::class => [
      SendEmailVerificationNotification::class,
    ],
    'App\Events\UserBrowse' => [
      'App\Listeners\CreateBrowseLog',
      // 其它監聽器
    ],
  ];

添加好之后,執行 php artisan event:generate,會自動創建對應的事件/監聽器。分別創建了 app/Events/UserBrowse.php 和 app/Listeners/CreateBrowseLog.php 兩個文件。

實現代碼

把目光聚集到事件 app/Events/UserBrowse.php 文件,這里需要接收數據以便后續處理,代碼如下

  public $ip_addr;
  public $request_url;
  public $city_name;

  /**
   * Create a new event instance.
   *
   * @return void
   */
  public function __construct($ip_addr, $request_url, $city_name)
  {
    $this->ip_addr = $ip_addr;
    $this->request_url = $request_url;
    $this->city_name = $city_name;
  }

然后是監聽器 app/Listeners/CreateBrowseLog.php,這里要做的是,將事件中接收到的數據進行入庫操作,代碼如下

/**
   * Handle the event.
   *
   * @param UserBrowse $event
   * @return void
   */
  public function handle(UserBrowse $event)
  {
    $log = new \App\Models\BrowseLog();

    $log->ip_addr = $event->ip_addr;
    $log->request_url = $event->request_url;
    $log->city_name = $event->city_name;

    $log->save();
  }

分發事件

最后就是分發事件,修改 app/Http/Middleware/BrowseLog.php 中間件的代碼,修改后如下

/**
   * Handle an incoming request.
   *
   * @param \Illuminate\Http\Request $request
   * @param \Closure $next
   * @return mixed
   */
  public function handle($request, Closure $next)
  {
    // 使用事件/監聽器入庫
    event(new UserBrowse($request->getClientIp(), $request->path(), get_city_by_ip(false, 'null')));
    
    return $next($request);
  }

關于使用laravel怎么實現一個事件監聽器就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临江市| 故城县| 手机| 蒙山县| 鱼台县| 启东市| 龙井市| 寿光市| 绍兴县| 纳雍县| 横山县| 柞水县| 正镶白旗| 光泽县| 务川| 长泰县| 武功县| 郯城县| 东安县| 石嘴山市| 赤壁市| 庄浪县| 曲阳县| 乐亭县| 太和县| 遂平县| 凤山县| 车致| 庐江县| 蛟河市| 成都市| 鱼台县| 台中县| 全南县| 太仓市| 汤原县| 沅陵县| 东宁县| 密云县| 商洛市| 威海市|