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 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
php准确计算复活节日期的方法
Apr 18 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
php函数传值的引用传递注意事项分析
Jun 25 PHP
php中对象引用和复制实例分析
Aug 14 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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代码
2006/12/06 PHP
php生成xml简单实例代码
2009/12/16 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP文件读取功能的应用实例
2015/05/08 PHP
php实现的递归提成方案实例
2015/11/14 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
完美的php分页类
2017/10/24 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
浅谈Python中的闭包
2015/07/08 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
基于Django用户认证系统详解
2018/02/21 Python
python实现Windows电脑定时关机
2018/06/20 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
python正则表达式实例代码
2020/03/03 Python
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
索桥的故事教学反思
2014/02/06 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
爱心捐款活动总结
2015/05/09 职场文书
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers