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
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
微信API接口大全
Apr 15 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
PHP实现微信发红包程序
Aug 24 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
PHP实现财务审核通过后返现金额到客户的功能
Jul 04 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 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 fsockopen伪造post与get方法的详解
2013/06/14 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
Python学习资料
2007/02/08 Python
用实例解释Python中的继承和多态的概念
2015/04/27 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
python文件操作的简单方法总结
2019/11/07 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
大学生如何写自荐信
2014/01/08 职场文书
简历自我评价模版
2014/01/31 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
甜品店创业计划书
2014/09/21 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript
mysql自增长id用完了该怎么办
2022/02/12 MySQL
A22国内电台短波广播频率表
2022/05/10 无线电
hive数据仓库新增字段方法
2022/06/25 数据库