3

CandidateEvent 内で if(Auth::user()->role == "xxxx") を尋ねると、「オブジェクト以外のプロパティを取得しようとしています」と表示されます

問題は、コンポーネント Auth::user() がイベントで機能していないことです。

イベント内で Auth を使用する正しい方法は何ですか?

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

4 に答える 4

5

認証されたユーザーがいない場合はAuth::user()が返されるnullためAuth::user()->roleTrying 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()

これがお役に立てば幸いです。

于 2016-08-03T00:36:16.260 に答える
0

Auth ファサードの名前空間をインポートしていないようです。宣言に追加する必要があります

use Illuminate\Support\Facades\Auth;
于 2016-08-03T00:31:24.760 に答える
0

ルートのデータを介して、ユーザーをイベントに渡すことを解決しました:

  Route::group(['middleware' => ['xxxx']], function () {
    event(new NameEvent($data));
    Route::auth();
});
于 2016-08-03T01:09:26.983 に答える