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面向对象编程快速入门
Oct 09 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
Yii框架登录流程分析
Dec 03 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
PHP中的表达式简述
May 29 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
php封装的page分页类完整实例
Oct 18 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php图像验证码生成代码
Jun 08 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
解析js如何获取css样式
2016/12/11 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
python实现自主查询实时天气
2018/06/22 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
书法培训心得体会
2014/01/05 职场文书
职业规划书如何设计?
2014/01/09 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
促销活动总结报告
2014/04/26 职场文书
毕业生面试求职信
2014/06/23 职场文书
2014和解协议书范文
2014/09/15 职场文书
领导班子整改方案
2014/10/25 职场文书
营业用房租赁协议书
2014/11/26 职场文书
门店店长岗位职责
2015/04/14 职场文书