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.mzph.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…