Laravel 51 事件、事件監聽的簡單應用
?
有時候當我們單純的看Laravel
手冊的時候會有一些疑惑,比如說系統服務下的授權和事件,這些功能服務的應用場景是什麼,其實如果沒有經歷過一定的開發經驗有這些疑惑是很正常的事情,但是當我們在工作中多加思考會發現有時候這些服務其實我們一直都看過。下面就事件、事件監聽舉一個很簡單的例子你就會發現。
? 這個例子是關於文章的瀏覽數的實現,當用戶查看文章的時候文章的瀏覽數會增加1,用戶查看文章就是一個事件,有了事件,就需要一個事件監聽器,對監聽的事件發生後執行對應的操作(文章瀏覽數加1),其實這種監聽機制在Laravel
中是透過觀察者模式實現的.
註冊事件以及監聽器
首先我們需要在app/Providers/
目錄下的EventServiceProvider.php
中註冊事件監聽器映射關係,如下:
<code><span>protected</span><span>$listen</span> = <span>[</span><span>'App\Events\BlogView'</span> => <span>[</span><span>'App\Listeners\BlogViewListener'</span><span>,</span><span>],</span><span>];</span></code>
接著專案根目錄下執行如下指令
<code>php artisan event:generate</code>
接著專案根目錄下執行如下指令reee /Events
和
app/Listensers目錄下產生
BlogView.php和
BlogViewListener.php
<code><span><?php</span><span>namespace</span> App\Events<span>;</span><span>use</span> App\Events\Event<span>;</span><span>use</span> App\Post<span>;</span><span>use</span> Illuminate\Queue\SerializesModels<span>;</span><span>use</span> Illuminate\Contracts\Broadcasting\ShouldBroadcast<span>;</span><span>class</span> BlogView <span>extends</span> Event { <span>use</span> SerializesModels<span>;</span><span>/**</span><span> * Create a new event instance.</span><span> *</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span><span>__construct</span><span>(</span>Post <span>$post</span><span>)</span> { <span>$this</span>->post = <span>$post</span><span>;</span> } <span>/**</span><span> * Get the channels the event should be broadcast on.</span><span> *</span><span> * </span><span>@return</span><span> array</span><span> */</span><span>public</span><span>function</span> broadcastOn<span>()</span> { <span>return</span><span>[];</span> } }</span></code>
其實看到這些你會發現該事件類只是注入了一個
Post
事件監聽器在
handle方法中接收事件實例,event:generate指令將會自動在handle方法中匯入適當的事件類別和類型提示事件。在
handle
<code><span><?php</span><span>namespace</span> App\Listeners<span>;</span><span>use</span> App\Events\BlogView<span>;</span><span>use</span> Illuminate\Queue\InteractsWithQueue<span>;</span><span>use</span> Illuminate\Contracts\Queue\ShouldQueue<span>;</span><span>use</span> Illuminate\Session\Store<span>;</span><span>class</span> BlogViewListener { <span>protected</span><span>$session</span><span>;</span><span>/**</span><span> * Create the event listener.</span><span> *</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span><span>__construct</span><span>(</span>Store <span>$session</span><span>)</span> { <span>$this</span>->session = <span>$session</span><span>;</span> } <span>/**</span><span> * Handle the event.</span><span> *</span><span> * </span><span>@param</span><span>BlogView</span><span> $event</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span> handle<span>(</span>BlogView <span>$event</span><span>)</span> { <span>$post</span> = <span>$event</span>->post<span>;</span><span>//先进行判断是否已经查看过</span><span>if</span><span>(</span>!<span>$this</span>->hasViewedBlog<span>(</span><span>$post</span><span>))</span> { <span>//保存到数据库</span><span>$post</span>->view_cache = <span>$post</span>->view_cache + <span>1</span><span>;</span><span>$post</span>->save<span>();</span><span>//看过之后将保存到 Session </span><span>$this</span>->storeViewedBlog<span>(</span><span>$post</span><span>);</span> } } <span>protected</span><span>function</span> hasViewedBlog<span>(</span><span>$post</span><span>)</span> { <span>return</span><span>array_key_exists</span><span>(</span><span>$post</span>->id<span>,</span><span>$this</span>->getViewedBlogs<span>());</span> } <span>protected</span><span>function</span> getViewedBlogs<span>()</span> { <span>return</span><span>$this</span>->session->get<span>(</span><span>'viewed_Blogs'</span><span>,</span><span>[]);</span> } <span>protected</span><span>function</span> storeViewedBlog<span>(</span><span>$post</span><span>)</span> { <span>$key</span> = <span>'viewed_Blogs.'</span>.<span>$post</span>->id<span>;</span><span>$this</span>->session->put<span>(</span><span>$key</span><span>,</span><span>time</span><span>());</span> } }</span></code>
事件和事件監聽完成後,我們要做的就是實現整個監聽,即觸發用戶打開文章事件在此我們使用和
Event提供的
fire
以上就介紹了Laravel 51 事件、事件監聽的簡單應用,包括了開發經驗,映射關係方面的內容,希望對PHP教程有興趣的朋友有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

京東商城APP實名認證怎麼搞?京東商城是許多朋友常用的網路購物平台,大家在購物前,最好先進行實名認證,這樣才能享受到完整的服務,獲得更好的購物體驗。以下帶來京東商城實名認證方法,希望對網友們有幫助。 1.安裝並開啟京東商城,接著登入個人帳號;2、然後點選頁面下方【我的】,進入個人中心頁面;3、之後再點選右上角的【設定】小圖標,前往設定功能介面;4、選擇【帳號與安全】這一項,來到帳戶設定頁面;5、最後再點擊【實名認證】選項,前往填寫實名資訊;6、安裝系統要求填寫個人真實信息,完成實名認證

在全球範圍內,Apple公司的產品和服務一直備受用戶喜愛。註冊一個香港AppleID將帶給用戶更多的便利和特權,讓我們一起來了解一下註冊香港AppleID的步驟以及需要注意的事項。如何註冊香港AppleID在使用蘋果設備時,許多應用程式和功能都需要使用AppleID進行登入。如果您想下載香港地區的應用程式或享受香港AppStore的優惠內容,那麼註冊一個香港AppleID就非常必要。本文將詳細介紹如何註冊香港AppleID的步驟以及需要注意的事項。步驟:選擇語言與地區:在蘋果設備上找到「設定」選項,進入

中國聯通app能夠輕鬆的滿足大家的使用,多樣的功能,解決你們的需求,想要辦理各種業務,都可以在這裡輕鬆的搞定,有不需要的都可以在這裡及時的退訂掉,有效的避免後續的損失,很多人在使用手機時,有時感覺流量不夠用,就購買了額外的流量包,但下個月又不想要要,就想要馬上的退訂掉,在這裡小編為大家提供退訂的方法,讓需要的朋友們,都可以來使用起來! 在中國聯通app中,找到右下角的「我的」選項,點擊它。 在我的介面裡,滑動我的服務一欄,點擊其中的「我已訂購」選

app全名為“Application”,即應用程式的縮寫,是指針對行動裝置開發的一種軟體應用。 app的出現為使用者提供了更多種類的行動應用程式選擇,滿足了使用者在不同場景下的各類需求。 app的開發過程涉及軟體設計、程式設計、測試等多個環節,同時也需要考慮設備相容性、效能最佳化、安全性等方面的問題。

發票作為購物憑證,對於我們的日常生活和工作都至關重要。那麼我們平常在使用多點app進行購物的時候,如何在多點app中輕鬆開立發票呢?下文中本站小編將為大家帶來詳細的多點app開立發票詳細操作步驟攻略,想要了解的用戶們千萬不容錯過,快來跟著文本一起操作了解一下吧!在【發票中心】點選【多點超市/自由購】在已完成的訂單頁中選擇需要開立發票的訂單,點選下一步填寫【發票資訊】,【收件者資訊】,確認無誤後點選提交過個幾分鐘後,進入收件信箱,打開郵件,點選電子發票下載地址最後,下載列印電子發票

Blackmagic Design 終於將其廣受好評的 Blackmagic Camera 應用程式帶到了 Android 平台。專業攝影機應用程式可免費下載,並提供完整的手動控制。這些控制旨在讓您更輕鬆地獲得專業級 cin

WindowsAppRuntime或WinRT就像微軟建立的工具箱。它幫助開發人員在許多設備上建立和運行應用程序,如電腦、平板電腦、手機、Xbox等。在執行應用程式時,如果您收到此應用程式需要WindowsAppRuntime的錯誤訊息,請遵循此貼文以解決該問題。為什麼會出現此錯誤? WindowsAppRuntime是一個強大的工具,可以幫助開發人員在各種裝置上建置和運行應用程序,包括電腦、平板電腦、手機、Xbox和HoloLens。如果您收到提示需要WindowsAppRuntime來執行

PHP是一種廣泛應用於網站開發的程式語言,而頁面跳躍並攜帶POST資料是在網站開發中常見的需求。本文將介紹如何實現PHP頁面跳轉並攜帶POST數據,包括具體的程式碼範例。在PHP中,頁面跳躍一般透過header函數實現。如果需要在跳轉過程中攜帶POST數據,可以透過以下步驟完成:首先,建立一個包含表單的頁面,使用者在該頁面填寫資訊並點擊提交按鈕。在表單的acti
