laravel 使用事件系统统计浏览量的实现

最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用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 使用事件系统统计浏览量的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Laravel统计一段时间间隔的数据方法

    获取七天以前到现在的数据: $days = Input::get('days', 7); $range = \Carbon\Carbon::now()->subDays($days); $stats = User::where('created_at', '>=', $range) ->groupBy('date') ->orderBy('date', 'DESC') ->get([ DB::raw('Date(created_at) as date'), DB::raw('

  • laravel withCount 统计关联数量的方法

    统计关联数量,单个用法 $posts = Post::withCount('comments')->orderBy('id','desc')->paginate(6); 多个用法 $posts = Post::withCount(['comments','zans'])->orderBy('id','desc')->paginate(6); 调用 $post->comments_count 一定要是5.3版本之后,5.2和5.1都会报方法未定义 以上这篇laravel wit

  • 利用Laravel事件系统如何实现登录日志的记录详解

    本文介绍的是利用Laravel事件系统实现登录日志记录的相关内容,分享出来给大家参考,下面来看看详细的介绍: 明确需求 记录一个登录日志,通常需要下列信息: 客户端Agent信息 客户端IP地址 访问IP地点 登录时间 登录用户信息 确立工具 明确完需求后,根据每个需求查找自己所需的工具吧. 需求1 jenssegers/agent就可以满足我们要求 需求2 Laravel下直接Request::getClientIp() 需求3 zhuzhichao/ip-location-zh这个包可以满足

  • laravel 使用事件系统统计浏览量的实现

    最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数. 1.在 app\Providers\EventServiceProvider 中注册监听器: /** * The event listener mappings for the application. * * @var array */

  • thinkPHP+ajax实现统计页面pv浏览量的方法

    本文实例讲述了thinkPHP+ajax实现统计页面pv浏览量的方法.分享给大家供大家参考,具体如下: 统计pv量很常用,下面的代码用ajax实现的,使用ajax可以避免页面缓存造成的影响,只要客户端的js代码执行了就可以统计流量. 一共就两步: 1. 将下面代码放在要统计的html页面中,测试时把地址换成自己的. <script> var ajax; if(window.XMLHttpRequest){ ajax = new XMLHttpRequest();}else{ ajax = ne

  • springboot+EHcache 实现文章浏览量的缓存和超时更新

    问题描述 当我们需要统计文章的浏览量的时候,最常规的做法就是: 1.访问文章链接www.abc.com/article/{id} 2.在控制层获取Article实体 3.得到文章浏览量count并且count++ 4.最后update实体Article. 这么做对没有访问量的网站来说很棒,如果网站访问量很大,这么不停的读写数据库,会对服务器造成很大的压力. 解决思路 引入Ehcache,将文章的访问量存在cache中,每点击一次文章,将cache中的count加1.在有效的时间内访问文章只是将c

  • python3使用GUI统计代码量

    本文实例为大家分享了python3使用GUI统计代码量的具体代码,供大家参考,具体内容如下 # coding=utf-8 ''' 选择一个路径 遍历路径下的每一个文件,统计代码量 字典存储 每一种类型文件的代码行数,eg: *.py -> 行数 全局变量 总行数 需要注意的是,这里仅仅能打开utf-8编码的文件,其他类型的文件无法打开,会出现解码错误 解决方法:使用try-except语句,遇到解码错误就跳过,即 except UnicodeDecodeError: ''' import eas

  • C#爬虫通过代理刷文章浏览量

    1.如何维护代理IP库? 想要使用代理IP,那就必须有一个一定数量.足够有效的代理ip库,在学习阶段,随便玩玩那就只能从免费的代理IP网站上抓取,没有一定数量的代理刷文章流浪量非常慢,首先就是要维护好自己的代理Ip库 之前用过的西刺代理.66ip比较靠谱,西祠好像有反扒,遇到过一次,不知道是西祠网站的问题还是反扒的策略,这两个网站每分钟抓取的能用的代理大概有2,3个,这已经算的上比较客观的了, data5u.快代理.ip3366网页端更新的非常少,而且有效性比较低,快代理抓取网页还必须设置Use

  • Java刷视频浏览量点赞量的实现代码

    说明 这几天班主任一直让我们访问一个网页来观察看视频,增加访问次数.每个班级还有指定的名额...而且经过我的测试,点赞次数是在观看视频一会才出现的.. 可是身为计算机专业的 肯定不想一直点啊 点啊 于是我就有了一个大胆的想法 分析 于是我就查看网页的源代码 这行代码是弹出点赞的时间为18s. 18秒后发生了什么呢 ?继续看 可以看到这个弹出点赞的父div为class="video_mask" 而且默认的显示框类型为none,即不显示. 好吧 废话不多说. 主要看下面的 如果我们点击了t

  • Python 自动刷博客浏览量实例代码

    思路来源 今天很偶然的一个机会,听到别人在谈论现在的"刷量"行为,于是就激发了我的好奇心.然后看了下requests模块正好对我有用,就写了一个简单的测试用例.神奇的发现这一招竟然是管用的.那还等什么,开刷咯. 前奏 思路很简单,就是一个发送请求的实现,就可以了.代码如下: headers = { 'referer':'http://jb51.net/', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537

  • php+ajax实现的点击浏览量加1

    下面就分享一段相对完整的能够在实际应用中派上用场的代码,此代码是ajax结合php代码实现的. 一.ajax代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>ajax实现浏览量点击增加</title> <script type="text/javascript"> var xmlhttp=false;

  • PHP图形计数器程序显示网站用户浏览量

    PHP图形计数器程序是一款简单的图片计数器,为了直观显示一个网站有多少用户浏览,需要在网页底部放一个图片计数器,也就是当前页面的访问量,访问量的数据是保存在 txt 文件里,可自动生成 num.txt 文件,自定义初始数据,显示的数字图片保存在 img 目录下,可以换成自己做的精美的图片,更换即可,index.php是调用文件,很简单. 本程序只有几十KB,系统代码设计简单易懂. 效果如下: 关于程序的安装很简单: 1.这款图形计数器不需要数据库的支持,只要能运行PHP即可,将index.php

  • 基于Django统计博客文章阅读量

    如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要记录的那么精确.因此我们使用一种简单但有效的方式来记录博客文章的阅读量:文章每被浏览一次,则其阅读量 +1,即所谓的文章页面 PV(Page View)数.虽然简单粗暴,但却高效实用. 增加新字段 为了记录文章的浏览量,需要在文章的数据库表中新增一个用于存储阅读量的字段.因此给博客文章的模型新增一个 views 字段: blog/models.py class Post(models.Model): # ...

随机推荐