有时候当我们单纯的看 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},说明广播成功。

event类型 php,深入解析PHP的Laravel框架中的event事件操作相关推荐

  1. Laravel框架中的event事件操作

    有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多 ...

  2. laravel 框架中使用数据库迁移添加注释

    laravel 框架中数据库迁移添加注释 在使用laravel框架过程中,估计很多人都有用过数据库迁移文件.可能大家都会在建表时为字段添加注释.我在此要说明的是为表添加注释 首先我们需要引入larav ...

  3. php辅助框架,【PHP开发框架】Laravel框架中辅助函数:optional ()函数的介绍

    laravel框架中的辅助函数有很多,那么,在 Laravel 新版本中又有什么非常好用的辅助函数呢?接下来的这篇文章中,ki4网将给大家介绍一个非常有用的辅助方法:optional()函数,这个函数 ...

  4. 阿里物联网套件在laravel框架中的使用--第一弹

    最近一直在研究物联网套件,也算是有点心得.然后研究归研究,终归是要回归实践的.在网上大致百度下,发现专门写阿里物联网套件的文章很少,所以就大致总结下,大致说一下物联网提供的phpSDK在laravel ...

  5. Laravel框架中config配置文件的使用

    在进行程序开发时,为了后期维护的方便,我们习惯上将配置信息单独写在一个配置文件中.在laravel框架中为我们提供了config目录专门用来存放配置文件.如果我们需要在config目录中添加自定义配置 ...

  6. Laravel框架中使用Service模式

    Laravel框架中使用 Presenter 模式 Laravel框架中使用 Repository 模式 Laravel的中大型项目构架和优雅的插件扩展l5-repository 若将商业逻辑都写在c ...

  7. 付费测算源码技术细节解析:使用Laravel框架实现的星座运势、塔罗牌、牛年运程、宝宝起名、月老姻缘、起名算命等多个功能模块

    技术文档:付费测算源码 1. 简介 本文档介绍了付费测算源码的技术细节,包括使用的技术.架构.数据库设计.代码结构和功能模块等.本源码提供了星座运势.塔罗牌.牛年运程.宝宝起名.月老姻缘.起名算命等多 ...

  8. Laravel框架中Guard的底层实现分析

    1. 什么是Guard 在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用.而登录/注册认证的核心就是: 用户的注册信息存入数据库(登记) 从数据库中读取数据和用户 ...

  9. 关于laravel框架中and 和orWhere 的多条件嵌套

    最近的项目一直在使用laravel框架,在使用过程中突然发现自带的助手函数where()与orWhere()使用起来和自己预想中的不一样,特此记录学习防止以后忘记. 举个例子我们需要查找状态为1,名称 ...

最新文章

  1. 王海峰发布百度智能云最新架构,推出AI中台和知识中台
  2. 十一.python面向对象(接口)abstractmethod,ABCMeta
  3. 微软提供支持Windows 10预览版和EdgeHTML 14的预配置虚拟主机
  4. 你还不会创建jQuery插件 ?
  5. 并发编程-05线程安全性之原子性【锁之synchronized】
  6. 我奋斗了十四年,却依然不能和你坐在一起相亲
  7. Ubuntu 16.04 LTS apt-get connect refuse Unable to connect to 127.0.0.1:1080
  8. OS中atomic的实现解析
  9. 解决做好一个机器学习项目的3个问题
  10. Opencv--cvGEMM、cvMatMul和cvMatMulAdd的定义
  11. Jenkins - 持续集成环境搭建【转】
  12. 拓端tecdat|用R语言模拟随机服务排队系统
  13. SQL sever2008 r2安装闪退的解决办法
  14. JAVA类计算机专业毕业设计题目课题选题
  15. 【HP-MC/SG】HP-MC/SG添加LV测试
  16. android 6.0 大神f2,酷派大神F2刷机包 64位1080p 全高清版 MIUI8安卓6.0 插桩适配ROM 锁屏画报 极致体验...
  17. ESP32基于arduino开发的心跳体温检测系统(四)本地端系统整合
  18. 药物优化中的Oracle什么意思?评价指标(Metrics)是什么?
  19. 数学建模:种群竞争模型
  20. unity三维云图_Unity3d温度云图shader

热门文章

  1. 最新突破!科学家研发出世界首款精神控制手臂机器人;近日Kubernetes 1.15 正式发布;雷军公布小米手机产品线布局……...
  2. 使用云原生buildpacks将你的代码转换成Docker Image | 技术头条
  3. 查看系统是否安装了ftp服务器上,linux查看是否安装了ftp服务器上
  4. android java加密_Android Java字符串加密
  5. RuoYi-Cloud 部署篇_03(windows环境 mysql版本)
  6. oracle中如何创建表的自增ID(通过序列)
  7. (需求实战_进阶_05)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试
  8. 小程序开发(7)-之获取手机号、用户信息
  9. 小程序开发(6)-之自定义导航栏
  10. spring cloud gateway 网关_微服务网关Spring Cloud Gateway全搞定