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 文件缓存的性能测试
Apr 25 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php异步多线程swoole用法实例
Nov 14 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
使用JavaScript破解web
2018/09/28 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python实现句子翻译功能
2017/11/14 Python
Python中join函数简单代码示例
2018/01/09 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
python将音频进行变速的操作方法
2020/04/08 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
weblogic面试题
2016/03/07 面试题
工程监理应届生求职信
2013/11/09 职场文书
黄金酒广告词
2014/03/21 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
上课玩手机的检讨书
2014/10/01 职场文书