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学习之数据类型之间的转换代码
May 29 PHP
基于php 随机数的深入理解
Jun 05 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
php自定义函数实现二维数组排序功能
Jul 20 PHP
php并发加锁示例
Oct 17 PHP
静态html文件执行php语句的方法(推荐)
Nov 21 PHP
PHP基于GD库实现的生成图片缩略图函数示例
Jul 05 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
php实现的替换敏感字符串类实例
2014/09/22 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
php提取微信账单的有效信息
2018/10/01 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
jquery live()调用不存在的解决方法
2014/02/26 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
layer弹出层取消遮罩的方法
2019/09/25 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python通过colorama模块在控制台输出彩色文字的方法
2015/03/19 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
几个人围成一圈的问题
2013/09/26 面试题
大学校园生活自我鉴定
2014/01/13 职场文书
高中生活自我鉴定
2014/01/18 职场文书
党员干部承诺书范文
2014/03/25 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
英语故事演讲稿
2014/04/29 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
三八妇女节主持词
2015/07/04 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
Elasticsearch 基本查询和组合查询
2022/04/19 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL