event類型 php,深入解析PHP的Laravel框架中的event事件操作

有時候當我們單純的看 Laravel 手冊的時候會有一些疑惑,比如說系統服務下的授權和事件,這些功能服務的應用場景是什么,其實如果沒有經歷過一定的開發經驗有這些疑惑是很正常的事情,但是當我們在工作中多加思考會發現有時候這些服務其實我們一直都見過。下面就事件、事件監聽舉一個很簡單的例子你就會發現。

? 這個例子是關于文章的瀏覽數的實現,當用戶查看文章的時候文章的瀏覽數會增加1,用戶查看文章就是一個事件,有了事件,就需要一個事件監聽器,對監聽的事件發生后執行相應的操作(文章瀏覽數加1),其實這種監聽機制在 Laravel 中是通過觀察者模式實現的.

注冊事件以及監聽器

首先我們需要在 app/Providers/目錄下的EventServiceProvider.php中注冊事件監聽器映射關系,如下:

然后項目根目錄下執行如下命令

該命令完成后,會分別自動在 app/Events和app/Listensers目錄下生成 BlogView.php和BlogViewListener.php文件。

定義事件

其實看到這些你會發現該事件類只是注入了一個 Post實例罷了,并沒有包含多余的邏輯。

定義監聽器

事件監聽器在handle方法中接收事件實例,event:generate命令將會自動在handle方法中導入合適的事件類和類型提示事件。在handle方法內,你可以執行任何需要的邏輯以響應事件,我們的代碼實現如下:

注釋中也已經說明了一些邏輯。

觸發事件

事件和事件監聽完成后,我們要做的就是實現整個監聽,即觸發用戶打開文章事件在此我們使用和 Event提供的 fire方法,如下:

現在打開頁面發現數據庫中的`view_cache已經正常加1了,這樣整個就完成了。

事件廣播

簡介:

Laravel 5.1 之中新加入了事件廣播的功能,作用是把服務器中觸發的事件通過websocket服務通知客戶端,也就是瀏覽器,客戶端js根據接受到的事件,做出相應動作。本文會用簡單的代碼展示一個事件廣播的過程。

依賴:

redis

nodejs, socket.io

laravel 5.1

配置:

config/broadcasting.php中,如下配置'default' => env('BROADCAST_DRIVER', 'redis'),,使用redis作為php和js的通信方式。

config/database.php中配置redis的連接。

定義一個被廣播的事件:

根據Laravel文檔的說明,想讓事件被廣播,必須讓Event類實現一個Illuminate\Contracts\Broadcasting\ShouldBroadcast接口,并且實現一個方法broadcastOn。broadcastOn返回一個數組,包含了事件發送到的channel(頻道)。如下:

被廣播的數據:

默認情況下,Event中的所有public屬性都會被序列化后廣播。上面的例子中就是$user_id這個屬性。你也可以使用broadcastWith這個方法,明確的指出要廣播什么數據。例如:

Redis和Websocket服務器:

需要啟動一個Redis,事件廣播主要依賴的就是redis的sub/pub功能,具體可以看redis文檔

需要啟動一個websocket服務器來和client通信,建議使用socket.io,代碼如下:

這里需要注意的是redis.on方法的定義,接收到消息后,給client發送一個事件,事件名稱為channel + ':' + message.event。

客戶端代碼:

客戶端我們也使用socket.io,作為測試,代碼盡量簡化,僅僅打印一個接受到的數據即可。如下:

服務器觸發事件:

直接在router中定義個事件觸發即可。如下:

測試:

啟動redis

啟動websocket

打開帶有客戶端代碼的頁面,可以看到websocket已經連接成功。

觸發事件,打開另一個頁面 localhost/event。

這時就可以發現,第一個頁面的console中打印出了Object{user_id: 3},說明廣播成功。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php 抽象類 靜態方法嗎,php中的抽象類和靜態方法是什么

php中的抽象類是指:在class前加了abstract關鍵字且存在抽象方法的類,它不能被直接實例化;靜態方法是指:被static關鍵字修飾的方法,靜態方法用于操作靜態屬性。抽象類抽象類是指在 class 前加了 abstract 關鍵字且存在抽…

python目錄結構生成庫,使用CMake構建平臺無關的目錄結構

我試圖為我的跨平臺項目創建一個目錄結構,但遇到了一些問題。我已經讓CMake確定了放置庫和可執行文件的適當位置,但這種結構僅適用于Windows。在我的結構如下所示:項目目錄垃圾箱可執行文件圖書館圖書館Python增壓模塊python腳本這在Windows上…

centos 怎樣下載php,centos下怎樣安裝軟件

centos下安裝軟件的方法是:centos安裝軟件的命令1、rpm包的安裝1.安裝一個包# rpm -ivh2.升級一個包# rpm -Uvh3.移走一個包# rpm -e4.安裝參數--force 即使覆蓋屬于其它包的文件也強迫安裝--nodeps 如果該RPM包的安裝依賴其它包,即使其它包沒裝&#xf…

php fpm 安裝配置,php php+fpm安裝配置

sudo apt - get install php5 - cgi php5 - mysql php5 - fpm php5 - curl php5 - gd php5 - idn php - pear php5 - imagick php5 - imap php5 - mcrypt php5 - mhash php5 - ming php5 - pspell php5 - recode php5 - snmp php5 - tidy php5 - xmlrpc php5 - xsl打開 /etc/ph…

php post 微信沙箱,微信支付平臺錯誤:獲取沙箱密鑰失敗,確保交易密鑰是

按官方提示進行獲取沙箱密鑰的時候,久試不爽,總是提示錯誤 :“獲取沙箱密鑰失敗,確保交易密鑰是否正確”。這個純粹是微信平臺挖的坑呀,文檔沒有詳細的進行一些講解,也沒有提示需要key,下面來說…

shell腳本執行oracle刪除表,shell腳本操作oracle刪除表空間、創建表空間、刪除用戶...

oracle下表空間的導出,用戶的刪除,表空間刪除,用戶新建,表空間新建,數據導入的shell使用非oracle用戶執行該腳本參數說名$1:base表空間的用戶名$2:同步表空間的用戶名使用場景測試用&#xff0c…

PHP標題獲取數據庫內容,php – 如何從數據庫獲取項目的標題并將其發送到CodeIgniter中的標題模板...

嘗試這個>型號更改>控制器已更改。在模型中function get_card($card){$query $this->db->query("SELECT * FROM table_name WHERE creditcards $card ");$result $query->result_array();$count count($result); # Newif(empty($count)){ # Newre…

php教程調用數據庫,PHP數據庫調用類調用實例,php數據庫調用實例_PHP教程

PHP數據庫調用類調用實例,php數據庫調用實例config("dnsaaa;uidsa;pwdsa;dbnametest");//3.選擇數據庫$dbname $db->select_db("test");//4.設置允許調試$db->debug true;//5.執行一條不返回結果的SQL語句$db->execute("insert…

linux顯示磁盤使用情況命令,Linux中監控磁盤分區和使用情況的幾個工具

導讀在文章中將討論Linux中可用于監視磁盤使用情況的命令行實用程序,提供有關總大小容量、已用總量、文件系統信息和分區信息等。讓我們看看這些工具如何幫助檢索這些信息df命令df是一個Linux命令行實用程序,用于監視Linux磁盤使用情況。df命令顯示文件系…

linux網絡是文件嗎,linux網絡配置文件是什么意思

離開了么放得下我么回來了么還會愛我么新兵答主07-22TA獲得超過2383個贊網卡的配置:1.網卡配置文件對于網卡信息的配置通常包括:配置IP地址、子網掩碼和網關。網卡信息保存在網卡配置文件中。網卡配置文件位于/etc/sysconfig/network-scripts目錄下。一塊…

cd linux給u盤安裝程序,使用U盤安裝CDlinux

3、先把u盤插在電腦上與電腦連接,格式化成“FAT”文件系統,更改卷標為“CDLINUX”,之后再打開UltraISO工具進行寫入:a、這里把你下載好的CDlinux文件打開。b、點擊“寫入硬盤映像”c、這里直接默認就好,點擊“寫入”4、…

linux7 telnet亂碼,CentOS7安裝配置telnet-server

1.安裝xinetd和telnet-serveryum -y install telnet-server xinetd2.啟服務(服務管理方式和CentOS6稍有區別)systemctl enable xinetd.serversystemctl enable telnet.socketsystemctl start telnet.socketsystemctl start xinetd.server注意:因為是由xinetd管理,這…

windows和linux存儲float,C語言float型數據在內存中的儲存方式

菜單導航/URHere/面包屑,通過CSS中的content簡潔表達代碼比如我們要寫一個菜單導航/URHere/面包屑,如: 首頁 > 個人中心 > 修改密碼 代碼: tolua雜記1 字符串調用luaFunc :DoString public class CallLuaFunction : MonoBehaviour { private…

Linux編譯C沒有文件名,crt1.o linux x64上沒有這樣的文件c編譯錯誤

我正在linux平臺上邁出第一步.我安裝了Centos x64.我正在嘗試構建一個包含幾個函數和幾個單元測試的小程序.我使用Netbeans 7.1.2作為開發環境.以下是構建過程的輸出:CLEAN SUCCESSFUL (total time: 671ms)"/usr/bin/gmake" -f nbproject/Makefile-Debug.…

linux nmap下載教程,Linux_在Linux系統上用nmap掃描SSL漏洞的方法,以下載nmap 6.45及以上版本。如 - phpStudy...

在Linux系統上用nmap掃描SSL漏洞的方法以下載nmap 6.45及以上版本。如果懶的重新安裝,可以直接下載ssl-heartbleed.nse 腳本。使用nmap 6.45掃描服務器心臟出血漏洞(heartbleed)的具體方法(步驟)如下:當然,你要先按好nmap,自己可以…

Linux的網絡協議族是什么,Linux 網絡協議的概述

網絡層協議網絡層協議主要包括 IP、ICMP(網絡控制報文協議)、ARP(地址解析協議)IP協議該協議被設計成互聯分組交換通信網,以形成一個網際通信環境。它負責在源主機和目的地主機之間傳輸來自其較高層軟件的稱為數據報文的數據塊,它在源和目的地之間提供非…

linux百度文字識別,基于Linux平臺的圖片文字識別系統

摘要:圖片文字識別OCR(Optical Character Recognition,光學字符識別)應用非常廣泛。例如DNA序列圖片識別;PDF文字識別;車牌號碼自動識別;手機上的手寫輸入識別等。近年來該應用更加廣泛,必然出現在教育領域的一款手機應用,將手機把試卷拍照查詢答案,首先就是圖片文字…

zenmap掃描出來linux,如何在Linux上使用NMAP安全掃描器

Nmap是一個免費的開源網絡發現和安全審計實用程序,在Linux用戶社區中被廣泛使用,因為它使用起來非常強大。 Nmap通過在特定目標(通過IP)發送數據包,并通過解釋傳入的數據包來確定哪些帖子被打開/關閉,掃描系統上運行什么服務&…

linux上的中國象棋游戲下載,中國象棋下載_中國象棋最新下載_玩一玩游戲

中國象棋是起源于中國,的一種棋類游戲,屬于兩個人之間的對抗,在中國有著悠久的歷史。由于它的器皿簡單,趣味性強,它已經成為一種非常受歡迎的棋類活動。中國象棋是中華民族的文化瑰寶,歷史悠久,…

c語言字面量的作用是為變量,C語言(五) C 全局變量,局部變量,靜態變量和常量...

一. 全局變量全局變量是在所有函數體的外部定義的,程序的所有部分(其他文件的代碼)都可以使用。全局變量不受作用域的影響。全局變量的生命周期一直到程序的結束,全局變量是靜態存儲方式。例:#include #include /* a 就是一個全局變量*/int a…