摘要:下面就事件事件監聽舉一個很簡單的例子你就會發現。定義監聽器事件監聽器在方法中接收事件實例,命令將會自動在方法中導入合適的事件類和類型提示事件。
? 有時候當我們單純的看 Laravel 手冊的時候會有一些疑惑,比如說系統服務下的授權和事件,這些功能服務的應用場景是什么,其實如果沒有經歷過一定的開發經驗有這些疑惑是很正常的事情,但是當我們在工作中多加思考會發現有時候這些服務其實我們一直都見過。下面就事件、事件監聽舉一個很簡單的例子你就會發現。
? 這個例子是關于文章的瀏覽數的實現,當用戶查看文章的時候文章的瀏覽數會增加1,用戶查看文章就是一個事件,有了事件,就需要一個事件監聽器,對監聽的事件發生后執行相應的操作(文章瀏覽數加1),其實這種監聽機制在 Laravel 中是通過觀察者模式實現的.
注冊事件以及監聽器首先我們需要在 app/Providers/目錄下的EventServiceProvider.php中注冊事件監聽器映射關系,如下:
protected $listen = [ "AppEventsBlogView" => [ "AppListenersBlogViewListener", ], ];
然后項目根目錄下執行如下命令
php artisan event:generate
該命令完成后,會分別自動在 app/Events和app/Listensers目錄下生成 BlogView.php和BlogViewListener.php文件。
定義事件post = $post; } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
其實看到這些你會發現該事件類只是注入了一個 Post實例罷了,并沒有包含多余的邏輯。
定義監聽器事件監聽器在handle方法中接收事件實例,event:generate命令將會自動在handle方法中導入合適的事件類和類型提示事件。在handle方法內,你可以執行任何需要的邏輯以響應事件,我們的代碼實現如下:
session = $session; } /** * Handle the event. * * @param BlogView $event * @return void */ public function handle(BlogView $event) { $post = $event->post; //先進行判斷是否已經查看過 if (!$this->hasViewedBlog($post)) { //保存到數據庫 $post->view_cache = $post->view_cache + 1; $post->save(); //看過之后將保存到 Session $this->storeViewedBlog($post); } } protected function hasViewedBlog($post) { return array_key_exists($post->id, $this->getViewedBlogs()); } protected function getViewedBlogs() { return $this->session->get("viewed_Blogs", []); } protected function storeViewedBlog($post) { $key = "viewed_Blogs.".$post->id; $this->session->put($key, time()); } }
注釋中也已經說明了一些邏輯。
觸發事件事件和事件監聽完成后,我們要做的就是實現整個監聽,即觸發用戶打開文章事件在此我們使用和 Event提供的 fire方法,如下:
firstOrFail(); Event::fire(new BlogView($post)); return view("home.blog.content")->withPost($post); } }
現在打開頁面發現數據庫中的 view_cache 已經正常加1了,這樣整個就完成了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21232.html
摘要:事實上,這是討論測試的惟一一章。因此,在中沒有單一的測試方法。包含了這是的標準強調業務或特性測試是最流行的框架。然后我們在這個項目中使用進行單元測試。在隨后的章節中,將不再進行測試。 原文地址: Laravel 5.1 Beauty - Testing Note 本系列第四節內容. 本章會創建一個以后可以用到的項目便于以后我們的課程使用, 同時也會查課各種測試選項. 以后一段時間內會開...
摘要:初步嘗試既然最常見的注冊命令的方式是修改類中的,那么一般正常人都會從這邊開始下手。又要自己取出實例,又要自己調用方法,調用方法之前還有自己先把實例化這么繁瑣,肯定不是運行時添加命令的最佳實踐,所以我決定繼續尋找更優解。 本文首發于我的博客,原文鏈接:https://blessing.studio/best-... 雖然 Laravel 官方文檔提供的添加 Artisan Command...
摘要:提供了一種全新的發送通知的方式。個人理解是可以基于某事件操作觸發一系列的通知任務,而通知方式由通知渠道接管,這樣使得通知或推送邏輯更抽象,更易于管理和重構。在之前,我是利用的來完成這一系列通知。使用的配置文件還是原來的,無需重新配置。 Laravel Notification Laravel 5.3 提供了一種全新的發送通知的方式:Notification 。個人理解是可以基于某事件(...
摘要:框架關鍵技術解析讀書筆記二第五章框架應用程序根目錄版本默認的框架應用程序是符合規范的,所以相應的目錄結構也是基本固定的,不同的目錄加載了功能文件,如果添加了新的目錄,需要在文件中添加規范的自動加載部分并執行命令。 Laravel 框架關鍵技術解析·讀書筆記(二) 第五章 框架應用程序根目錄(5.1版本) 默認的Laravel框架應用程序是符合PSR規范的,所以相應的目錄結構也是基本...
摘要:對于包含通配符的事件名,會被統一放入數組中,是用來創建事件對應的的如果是監聽器是類,去創建監聽類創建的時候,會判斷監聽對象是監聽類還是閉包函數。對于閉包監聽來說,會再包裝一層返回一個閉包函數作為事件的監聽者。 事件系統 Laravel 的事件提供了一個簡單的觀察者實現,能夠訂閱和監聽應用中發生的各種事件。事件機制是一種很好的應用解耦方式,因為一個事件可以擁有多個互不依賴的監聽器。lar...
閱讀 2031·2023-04-25 15:24
閱讀 1575·2019-08-30 12:55
閱讀 1615·2019-08-29 15:27
閱讀 470·2019-08-26 17:04
閱讀 2406·2019-08-26 10:59
閱讀 1797·2019-08-26 10:44
閱讀 2193·2019-08-22 16:15
閱讀 2587·2019-08-22 15:36