当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-06 10:36:08 浏览: 评论:0 

今天小编就为大家分享一篇laravel 使用事件系统统计浏览量的实现,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。

1、在 app\Providers\EventServiceProvider中注册监听器:

  1. /** 
  2.  * The event listener mappings for the application. 
  3.  * 
  4.  * @var array 
  5.  */ 
  6. protected $listen = [ 
  7.  ...... 
  8.  'App\Events\Statistics' => [ 
  9.   'App\Listeners\BehavioralStatistics'
  10.  ], 
  11.  ...... 
  12. ]; 

2、执行

php artisan event:generate

生成事件类与监听类

3、定义事件

  1. <?php 
  2.  
  3. namespace App\Events; 
  4.  
  5. use Illuminate\Broadcasting\Channel; 
  6. use Illuminate\Queue\SerializesModels; 
  7. use Illuminate\Broadcasting\PrivateChannel; 
  8. use Illuminate\Broadcasting\PresenceChannel; 
  9. use Illuminate\Foundation\Events\Dispatchable; 
  10. use Illuminate\Broadcasting\InteractsWithSockets; 
  11. use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 
  12.  
  13. class Statistics 
  14.  use Dispatchable, InteractsWithSockets, SerializesModels; 
  15.  
  16.  public $user
  17.  public $obj
  18.  
  19.  /** 
  20.   * Create a new event instance. 
  21.   * 
  22.   * @return void 
  23.   */ 
  24.  public function __construct($user,$obj
  25.  { 
  26.   $this->user = $user
  27.   $this->obj = $obj
  28.  } 
  29.  
  30.  /** 
  31.   * Get the channels the event should broadcast on. 
  32.   * 
  33.   * @return \Illuminate\Broadcasting\Channel|array 
  34.   */ 
  35.  public function broadcastOn() 
  36.  { 
  37.   return new PrivateChannel('channel-name'); 
  38.  } 

4、定义监听器:

  1. <?php 
  2.  
  3. namespace App\Listeners; 
  4.  
  5. use App\Events\Statistics; 
  6. use App\System\StaticsView; 
  7. use Illuminate\Queue\InteractsWithQueue; 
  8. use Illuminate\Contracts\Queue\ShouldQueue; 
  9. use Illuminate\Support\Facades\Log; 
  10.  
  11. class BehavioralStatistics 
  12.  /** 
  13.   * Create the event listener. 
  14.   * 
  15.   * @return void 
  16.   */ 
  17.  public function __construct() 
  18.  { 
  19.   // 
  20.  } 
  21.  
  22.  /** 
  23.   * Handle the event. 
  24.   * 
  25.   * @param Statistics $event 
  26.   * @return void 
  27.   */ 
  28.  public function handle(Statistics $event
  29.  { 
  30.   $obj_class = get_class($event->obj); 
  31.   $statics_view = new StaticsView; 
  32.  
  33.   switch($obj_class){ 
  34.    case "App\\User"
  35.     $statics_view->statics_type = 'user'
  36.  
  37.     break
  38.    case "App\\Production"
  39.     $statics_view->statics_type = 'production'
  40.  
  41.     break
  42.   } 
  43.  
  44.   $statics_view->ip = request()->getClientIp();; 
  45.   $statics_view->time_local = 0; 
  46.   $statics_view->statics_id = $event->obj->id; 
  47.   $statics_view->save(); 
  48.  } 

5、触发事件:

event(new Statistics(user, user,user,production));

Tags: laravel事件系统 laravel浏览量

分享到: