最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用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 使用事件系统统计浏览量的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持站长技术。
一、Flutter Boost简介 众所周知,Flutter是一个由C++实现的Flutter Engine和由D...
当一个项目很大的时候我们去找某一个文件经常使用搜索功能,本人经常使用快捷键c...
红帽6虚拟机中smb服务器的搭建与应用windows 本片文章将带大家从头开始搭建smb服...
Readonly和Disabled它们都能够做到使用户不能够更改表单域中的内容。但是它们之...
InnoDB存储引擎 1.InnoDB是 事务型数据库 的首选引擎支持事务安全表ACID 2.InnoD...
'================================================ '函数名:ReSaveRemoteFile...
1.创建索引方法 创建索引可以在建表时指定,也可以建表后使用 alter table 或 cr...
复制代码 代码如下: % '*****************************************************...
前言 数组是一种特殊对象。js中并没有真正的数组,只是用对象模拟数组。 查看对...
本文章分为三个部分: web网站发布、IIS6 安装方法、ASP.NET v4.0 安装方法 一、w...