2016-08-02 4 views
1

Когда я спрашиваю, если (Auth :: пользователя() -> роль == «хххх») внутри CandidateEvent дисплеев «Попытка получить свойство не-объект»Laravel-Event: Как использовать Auth :: user() в событии?

Проблема в том, что компонент Auth :: пользователя() не работает в моем Событии.

Каков правильный способ использования 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). В идеале я мог бы просто передать пользователю в качестве зависимости.