laravel 使用事件系统统计浏览量的实现


Posted in PHP onOctober 16, 2019

最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。

1、在 app\Providers\EventServiceProvider

中注册监听器:

/**
  * The event listener mappings for the application.
  *
  * @var array
  */
 protected $listen = [
  ......
  'App\Events\Statistics' => [
   'App\Listeners\BehavioralStatistics',
  ],
  ......
 ];

2、执行

php artisan event:generate

生成事件类与监听类

3、定义事件

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class Statistics
{
 use Dispatchable, InteractsWithSockets, SerializesModels;

 public $user;
 public $obj;

 /**
  * Create a new event instance.
  *
  * @return void
  */
 public function __construct($user,$obj)
 {
  $this->user = $user;
  $this->obj = $obj;
 }

 /**
  * Get the channels the event should broadcast on.
  *
  * @return \Illuminate\Broadcasting\Channel|array
  */
 public function broadcastOn()
 {
  return new PrivateChannel('channel-name');
 }
}

4、定义监听器:

<?php

namespace App\Listeners;

use App\Events\Statistics;
use App\System\StaticsView;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;

class BehavioralStatistics
{
 /**
  * Create the event listener.
  *
  * @return void
  */
 public function __construct()
 {
  //
 }

 /**
  * Handle the event.
  *
  * @param Statistics $event
  * @return void
  */
 public function handle(Statistics $event)
 {
  $obj_class = get_class($event->obj);
  $statics_view = new StaticsView;

  switch($obj_class){
   case "App\\User":
    $statics_view->statics_type = 'user';

    break;
   case "App\\Production":
    $statics_view->statics_type = 'production';

    break;
  }

  $statics_view->ip = request()->getClientIp();;
  $statics_view->time_local = 0;
  $statics_view->statics_id = $event->obj->id;
  $statics_view->save();
 }
}

5、触发事件:

event(new Statistics(user, user,user,production));

以上这篇laravel 使用事件系统统计浏览量的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
最新的php 文件上传模型,支持多文件上传
Aug 13 PHP
php实现的仿阿里巴巴实现同类产品翻页
Dec 11 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
基于php-fpm的配置详解
Jun 03 PHP
处理单名多值表单的详解
Jun 08 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
php创建多级目录的方法
Mar 24 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
详解PHP发送邮件知识点
May 06 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 #PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 #PHP
Laravel 连接(Join)示例
Oct 16 #PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 #PHP
PHP 代码简洁之道(小结)
Oct 16 #PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 #PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 #PHP
You might like
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
php写app用的框架整理
2019/09/29 PHP
prototype 中文参数乱码解决方案
2009/11/09 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
ipad上运行python的方法步骤
2019/10/12 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
责任书范本大全
2015/05/11 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
Vue3中的Refs和Ref详情
2021/11/11 Vue.js