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中函数的形参与实参的问题说明
Sep 01 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
3种php生成唯一id的方法
Nov 23 PHP
thinkPHP简单遍历数组方法分析
May 16 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
php intval函数用法总结
Apr 14 PHP
php简单检测404页面的方法示例
Aug 23 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
PHP实现发送微博消息功能完整示例
Dec 04 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
php中error与exception的区别及应用
2014/07/28 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
JS 获取滚动条高度示例代码
2013/10/24 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
javascript基础知识
2016/06/07 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
python发送邮件功能实现代码
2016/07/15 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
四年的大学生生活自我评价
2013/12/09 职场文书
初中作文评语集锦
2014/12/25 职场文书
考研经验交流会策划书
2015/11/02 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL