0

我已經從4.2到laravel5.3升級Laravel,但我不能訪問的構造控制器獲取認證數據構造的問題在裏面Laravel5.3.19

我有如下中間件內的認證數據,但它從來沒有工作我

use App\Http\Controllers\BaseController; 

use Closure; 
use Illuminate\Contracts\Auth\Guard; 
use Redirect; 
use Auth; 
use App\User; 


class DashboardController extends BaseController 
{ 

    public $user; 

    public function __construct(Guard $guard, User $user) 
    { 
     $this->middleware(function ($request, $next) { 
      $this->user = Auth::user(); 
      return $next($request); 
     }); 
     //$this->userID = Auth::user()?Auth::user()->id:null; 

     dd($user);// Result attributes: [] 
     dd($guard); 
     dd($this->user); 

    } 

} 

DD()

DD($後衛)後的結果; This is the result of $guard

DD($ this-> user);

NULL 

當我使用dd屬性時,它將返回Null。

回答

1

這是可以預料的。您必須在middleware閉包中分配用戶的原因是因爲會話中間件尚未運行。因此,上面的關閉實際上不會在執行過程的後期被調用。

如果您將dd($this->user)移動到中間件閉包中,或者在該控制器中使用其中一個路由方法,它應該工作得非常好。

此外,僅供參考,在您的中間件關閉中,您可以從請求中獲得user實例,即$request->user()將爲您提供經過身份驗證的用戶。

希望得到這個幫助!

+0

絕對糾正 –

+0

我現在想如果我從父構造函數聲明,而不是在兒童中調用它構造函數是可能的嗎? –