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 xml文件操作实现代码(二)
Mar 20 PHP
PHP 组件化编程技巧
Jun 06 PHP
php 常用类汇总 推荐收藏
May 13 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
php变量作用域的深入解析
Jun 03 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
PHP getallheaders无法获取自定义头(headers)的问题
Mar 23 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
YII框架http缓存操作示例
Apr 29 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
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
php时间戳转换代码详解
2019/08/04 PHP
JavaScript的类型简单说明
2010/09/03 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
jQuery中绑定事件bind() on() live() one()的异同
2017/02/23 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
对python中return和print的一些理解
2017/08/18 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
PyQt5每天必学之组合框
2018/04/20 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Python Gitlab Api 使用方法
2019/08/28 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
Python基于requests库爬取网站信息
2020/03/02 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Python正则表达式如何匹配中文
2020/05/27 Python
python里反向传播算法详解
2020/11/22 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
揠苗助长教学反思
2014/02/04 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2015年班组工作总结
2015/04/20 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
详解Python牛顿插值法
2021/05/11 Python
pycharm代码删除恢复的方法
2021/06/26 Python