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 相关文章推荐
substr()函数中文版
Oct 09 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
解析htaccess伪静态的规则
Jun 18 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
thinkphp实现图片上传功能
Jan 13 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 PHP
php实现在线考试系统【附源码】
Sep 18 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递归调用与静态变量使用
2012/12/16 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
什么是组件架构
2016/05/15 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
校园文化建设方案
2014/02/03 职场文书
安全生产目标责任书
2014/04/14 职场文书
大学学习计划书范文
2014/05/02 职场文书
中考标语大全
2014/06/05 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
公司慰问信范文
2015/03/23 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android