2016-08-02 54 views
1

當我詢問CandidateEvent中的(Auth :: user() - > role ==「xxxx」)是否顯示「試圖獲取非對象的屬性」Laravel-Event:如何在事件中使用Auth :: user()?

問題是組件Auth :: user在我的活動中沒有工作。

什麼是在事件中使用Auth的正確方法?

public function __construct() 
{ 
    if(Auth::user()->role == "XXXX") 
    { 
     $candidate = count(Candidate::CountNewCandidate()); 
    } 
    else 
    { 
     $candidate = count(Candidate::CountNewCandidateGroup()); 
    } 
    $this->data = [ 'cCandidate' => $candidate ];   
} 
+0

代碼的圖像不是一個好主意。請考慮重新格式化您的問題。 –

+0

對不起,我是新手。現在? (是事件代碼) –

+0

將用戶傳遞給數據中的事件。 – ceejayoz

回答

3

如果沒有身份驗證的用戶Auth::user()將返回null,所以Auth::user()->role將提高Trying to get property of non-object;嘗試檢查,如果有一個身份驗證的用戶通過使用Auth::check()那麼你可以檢查角色:

public function __construct() 
{ 
    if(auth()->check() && auth()->user()->role == "XXXX") 
    { 
     $candidate = count(Candidate::CountNewCandidate()); 
    } 
    else 
    { 
     $candidate = count(Candidate::CountNewCandidateGroup()); 
    } 
    $this->data = [ 'cCandidate' => $candidate ];   
} 

注:我使用的輔助函數auth()

我希望這會幫助你。

+0

問題是組件Auth :: user()在我的事件中沒有工作,並且我已經在使用「Illuminate \ Support \ Facades \ Auth」; –

+0

嘗試使用助手'auth()','auth() - > user()'? –

0

看起來您並未導入Auth門面的名稱空間。你必須將它添加在聲明

use Illuminate\Support\Facades\Auth; 
+0

我已經在使用「Illuminate \ Support \ Facades \ Auth」; –

0

我解決它傳遞用戶事件,通過在數據的路由:

Route::group(['middleware' => ['xxxx']], function() { 
    event(new NameEvent($data)); 
    Route::auth(); 
}); 
0

原因驗證::用戶()是無效的一個事件(特別是如果它被排隊),是因爲有不是用戶。身份驗證數據通常存儲在會話中,當您的偶數被觸發時,不存在會話變量,因此沒有會​​話數據。

在我已經在事件的用戶傳遞,然後在事件處理程序中的用戶我會打電話驗證了過去:

\Auth::attempt(['email', $event->performedBy()->email]); 

,因爲我的應用程序有許多功能緊密結合驗證這是必要的(而不是UserInterface)。理想情況下,我可以剛剛通過用戶作爲依賴項。

相關問題