2016-08-02 67 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)。理想情况下,我可以刚刚通过用户作为依赖项。

相关问题