首頁 後端開發 php教程 Laravel 51 事件、事件監聽的簡單應用

Laravel 51 事件、事件監聽的簡單應用

Jul 29, 2016 am 09:11 AM
app event post use

?
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 /Eventsapp/Listensers目錄下產生BlogView.phpBlogViewListener.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

方法,如下:

rrrereee現在開啟頁面發現資料庫中的`view_cache已經正常加1了,這樣整個就完成了。

以上就介紹了Laravel 51 事件、事件監聽的簡單應用,包括了開發經驗,映射關係方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
京東商城APP如何進行實名認證 京東商城APP如何進行實名認證 Mar 19, 2024 pm 02:31 PM

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

註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) 註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) Sep 02, 2024 pm 03:47 PM

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

中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 Mar 18, 2024 pm 10:10 PM

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

app全名是啥 app全名是啥 Aug 21, 2023 am 10:29 AM

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

多點app如何開發票 多點app如何開發票 Mar 14, 2024 am 10:00 AM

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

Blackmagic 的專業級視訊應用程式登陸 Android,但您的手機可能無法運行它 Blackmagic 的專業級視訊應用程式登陸 Android,但您的手機可能無法運行它 Jun 25, 2024 am 07:06 AM

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

此應用程式需要Windows應用程式運行時 此應用程式需要Windows應用程式運行時 Feb 28, 2024 pm 05:37 PM

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

PHP跳轉頁面並攜帶POST資料的實作方法 PHP跳轉頁面並攜帶POST資料的實作方法 Mar 22, 2024 am 10:42 AM

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

See all articles