laravel 使用事件系统统计浏览量的实现
吾爱主题
阅读:112
2021-09-06 17:17:00
评论:0
最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。
1、在 app\Providers\EventServiceProvider
中注册监听器:
?1 2 3 4 5 6 7 8 9 10 11 12 | /** * The event listener mappings for the application. * * @var array */ protected $listen = [ ...... 'App\Events\Statistics' => [ 'App\Listeners\BehavioralStatistics' , ], ...... ]; |
2、执行
?1 | php artisan event:generate |
生成事件类与监听类
3、定义事件
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?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、定义监听器:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <?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、触发事件:
?1 | event( new Statistics(user, user,user,production)); |
以上这篇laravel 使用事件系统统计浏览量的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/hhhzua/article/details/80635808
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。