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中处理模拟rewrite 效果
Dec 09 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
关于laravel后台模板laravel-admin select框的使用详解
Oct 03 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开启安全模式后禁用的函数集合
2011/06/26 PHP
PHP中把stdClass Object转array的几个方法
2014/05/08 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
Javascript基础教程之argument 详解
2015/01/18 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
捐助倡议书
2015/01/19 职场文书
业务员岗位职责
2015/02/03 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
会计入职心得体会
2016/01/22 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle