好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > laravel 事件/監(jiān)聽器實例代碼

laravel 事件/監(jiān)聽器實例代碼

熱門標(biāo)簽:西區(qū)企業(yè)怎么做地圖標(biāo)注入駐 抖音有個地圖標(biāo)注是什么意思 保定crm外呼系統(tǒng)運營商 海南人工外呼系統(tǒng)有效果嗎 九江外呼系統(tǒng) 七魚外呼系統(tǒng)停用嗎 智能電話機器人排名前十名南京 地下城堡2圖九地圖標(biāo)注 阿里云400電話申請加工單

導(dǎo)語

上一篇文章實現(xiàn)了記錄用戶訪問,設(shè)計上是有缺陷的,代碼緊耦合在中間件。如果后續(xù)修改需求,不僅記錄 ip、城市,還需要記錄數(shù)據(jù)到新的數(shù)據(jù)表,或者需要進行其它統(tǒng)計,那么不停的增加、修改代碼是不合理的。這個時候可以使用 Laravel 的事件/監(jiān)聽器進行處理。代碼可查看 GitHub。

事件/監(jiān)聽器

Laravel 事件提供了簡單的觀察者模式實現(xiàn),允許你訂閱和監(jiān)聽?wèi)?yīng)用中的事件。

觀察者模式有時也被稱作發(fā)布/訂閱模式,該模式用于為對象實現(xiàn)發(fā)布/訂閱功能:一旦主體對象狀態(tài)發(fā)生改變,與之關(guān)聯(lián)的觀察者對象會收到通知,并進行相應(yīng)操作。

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

創(chuàng)建事件/監(jiān)聽器

在 app/Providers/EventServiceProvider.php 文件中添加事件/監(jiān)聽器,如下

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

添加好之后,執(zhí)行 php artisan event:generate,會自動創(chuàng)建對應(yīng)的事件/監(jiān)聽器。分別創(chuàng)建了 app/Events/UserBrowse.php 和 app/Listeners/CreateBrowseLog.php 兩個文件。

實現(xiàn)代碼

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

  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;
  }

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

/**
   * 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();
  }

分發(fā)事件

最后就是分發(fā)事件,修改 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)
  {
    // 使用事件/監(jiān)聽器入庫
    event(new UserBrowse($request->getClientIp(), $request->path(), get_city_by_ip(false, 'null')));
    
    return $next($request);
  }

測試之后是沒有問題的。

結(jié)語

這次所做的修改,感官上來看,就是將入庫操作從中間件轉(zhuǎn)移到監(jiān)聽器中,實際上的意義遠不止于此。例如同一個事件,可以分發(fā)在不同的地方;事件添加了需求,只需要在添加一個監(jiān)聽器即可;監(jiān)聽器中也可以使用隊列等等。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Laravel事件監(jiān)聽器用法實例分析

標(biāo)簽:十堰 韶關(guān) 九江 涼山 昭通 梅河口 遼陽 甘肅

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《laravel 事件/監(jiān)聽器實例代碼》,本文關(guān)鍵詞  laravel,事件,監(jiān)聽器,實例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《laravel 事件/監(jiān)聽器實例代碼》相關(guān)的同類信息!
  • 本頁收集關(guān)于laravel 事件/監(jiān)聽器實例代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 日韩免费观看一级毛片看看| 在野外被三个男人躁爽白浆视频| 国产人妻久久人妻福利福利大片 | 情欲情欲欲超市全文无删减| 91狠狠色综合久久久夜色撩人| 自w到高c时该看的| 浪荡受NP双性合集| 国产精品久久高潮呻吟无码| 91国色| 新红楼梦未删减版资源| 大荫蒂又大又长又硬又紧又粗| 波罗野结衣被躁57分钟| 色香蕉网站| 男人和女人全黄一级毛片| 啊轻点灬大ji巴太粗小说太男| 欧美一级a俄罗斯毛片| 国产人妻精品一区二区三水牛影视| 日本亚洲欧洲高清有码在线播放| 抬腰张开腿撞击h| 日韩毛片在线免费观看| 少妇一晚三次一区二区三区| 日本69xxxxx| 东流影院| 无码欧美精品一区二区蜜桃色欲| 人妻少妇91精品一区黑人| www黄色大片| 久久精品电影天堂网| 成年人爱爱视频| 深夜A级毛片免费视频播放| 欧美成人精品aV无码试看30秒| 日韩操比视频| 赤坂丽女医性肉奴| 干处女视频| 免费A片全黄少妇内谢抖音短视频 91九色丨PORNY丨极品女神 | 日韩一区二区三区四区五区| 狠狠色噜噜狠狠狠狠色综合久久| 午夜神器18以下不能进在线观看| 我不卡影院秋霞理论片| 最近2019中文字幕视频免费| 亚洲自偷自拍另类18p| 亚洲第一区的|