最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用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 使用事件系统统计浏览量的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
7.4.1.浏览文件系统 访问Android的文件系统有两种方式。一种是通过Eclipse,另一种是通过命令行。 Eclipse中提供了一个File Explorer工具供我们访问文件系统。要打开它,可以选择Window→Show View→Other…→Android→File Explorer,也可以单击右上角的DDMS中访问它。要打开DDMS,可以单击右上角的DDMS Perspective
8.4. 文件系统浏览 除了能在共享服务器上读取任意文件之外,攻击者还能建立一个可以浏览文件系统的脚本。由于你的大多数敏感文件不会保存在网站主目录下,此类脚本一般用于找到你的源文件的所在位置。请看下例: <pre> <?php if (isset($_GET['dir'])) { ls($_GET['dir']); } elseif (isset($_GET['file'])) { cat($_G
浏览器播放量统计 获取用户维度下按天统计的浏览器播放量,该接口提供一天或多天的数据查询,返回为汇总结果。 地址为: http://spark.bokecc.com/api/stats/playcount/user/daily/browser 需要传递以下参数: 参数 说明 userid 用户id,不可为空 start_date 查询开始日期(含),格式为yyyy-MM-dd,不可为空 end_da
问题内容: 我正在尝试实现一个JFileChooser,它允许用户通过ftp选择远程系统上的文件。 我读过的所有文章都说,可以通过扩展FileSystemView来实现,以便覆盖所有文件系统方法(getFiles等)并跨ftp路由。 我没有实现这一点的运气,因为FileSystemView似乎仍在调用本地函数。 任何人都可以确认可以做到这一点和/或为我指明正确的方向吗? 问题答案: 试试vfsjf
问题内容: 我在CentOS 6.6上安装了一个基本的hadoop集群,并想编写一些基本程序(浏览文件系统,删除/添加文件等),但是我仍在努力使最基本的应用程序正常工作。 当运行一些基本代码以将目录的内容列出到控制台时,出现以下错误: 我的pom.xml依赖项 代码: 调用fs.initialize()后将引发错误。我真的不确定这是什么问题。我是否缺少依赖关系?他们是错误的版本吗? 问题答案: 我
前言 Laravel 的事件系统是一个简单的观察者模式,主要目的是用于代码的解耦,可以防止不同功能的代码耦合在一起。laravel 中事件系统由两部分构成,一个是事件的名称,事件的名称可以是个字符串,例如 event.email,也可以是一个事件类,例如 AppEventsOrderShipped;另一个是事件的 listener,可以是一个闭包,还可以是监听类,例如 AppListenersSe