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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
PHP命名空间(namespace)的动态访问及使用技巧
Aug 18 PHP
简单谈谈favicon
Jun 10 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
php 策略模式原理与应用深入理解
Sep 25 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 adodb介绍
2009/03/19 PHP
建站常用13种PHP开源CMS比较
2009/08/23 PHP
PHP array操作10个小技巧分享
2011/06/23 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
Javascript 命名空间模式
2013/11/01 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
使用css3制作登录表单的步骤
2014/04/07 HTML / CSS
浅谈css3中的前缀
2016/07/20 HTML / CSS
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
大学四年学习的自我评价分享
2013/12/09 职场文书
幼儿教师国培感言
2014/02/19 职场文书
《大海那边》教学反思
2014/04/09 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
2015公司年度工作总结
2015/05/14 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
Oracle中日期的使用方法实例
2022/07/07 Oracle