2017-07-01 146 views
0

所以我有幾個戲劇與我的controllers。他們似乎正常運行,但他們似乎並沒有在controllers中使用__construct() ..我試圖用它來更新我們的users table以顯示上次活動。Laravel控制器__construct問題

<?php 

namespace App\Http\Controllers; 

use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Http\Request; 
use App\Helpers\UserHelper; 
use App\Helpers\ForumHelper; 
use App\Helpers\ShopHelper; 
use Auth; 
use Image; 
use App\User; 
use DB; 
use Hash; 
use File; 

class AdminController extends BaseController 
{ 

public function __construct() { 
    if ($_SERVER["HTTP_CF_CONNECTING_IP"]) { 
    $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_CF_CONNECTING_IP"]; 
    } 

    if(Auth::check()) { 
    $time = strtotime("now"); 
    DB::table('users')->where('userid', Auth::user()->userid)->update(['lastactivity' => $time]); 
    } 

} 

任何想法我能做些什麼來檢查並嘗試再次使用它?

我跑Laravel框架5.4.28

一個項目,我做了正在運行Laravel Framework版本5.2.45相似,並且工作得很好,當我這樣做,所以我很困惑,爲什麼這是一個較新的版本發生。

任何想法,否則我可以去執行DB更新時,從我的controllers加載的東西?

+0

'Auth :: check()'在構造函數中不起作用。在會話開始之前調用構造函數。你在做什麼應該使用中間件解決。 – apokryfos

回答

0

如果你想要一個活動追蹤然後添加一個網絡路由中間件:

class ActivityTrackerMiddleware { 
     public function handle($request,$next) { 
      if ($request->user()) { 
       $request->user()->lastactivity = Carbon::now(); 
       $request->user()->save(); 
      } 
      return $next($request); 
     } 
} 

在Web中間件補充一點:

'web' => [ ... 
     StartSession::class, 
     ActivityTrackerMiddleware::class, 
     ... 
    ]; 

您還可以限制它的管理控制器,如果你喜歡。

+0

謝謝,@apokryfos。我會放棄一下吧! – Andrew

+0

這工作!感謝百萬@apokryfos! – Andrew