当我询问CandidateEvent中是否(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 ];
}
答案 0 :(得分:4)
如果没有经过身份验证的用户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()
。
我希望这会对你有所帮助。
答案 1 :(得分:1)
Auth :: user()在事件中为空(特别是如果它排队)的原因是因为没有用户。验证数据通常存储在会话中,当触发偶数时,没有会话变量,因此没有会话数据。
过去我在事件中传递了用户,然后在我调用的事件处理程序中验证用户:
\Auth::attempt(['email', $event->performedBy()->email]);
这是必要的,因为我的应用程序有很多功能与Authentication(而不是UserInterface)紧密结合。理想情况下,我可以将用户作为依赖项传递给他人。
答案 2 :(得分:0)
看起来您没有为Auth facade导入名称空间。您必须在声明中添加它
use Illuminate\Support\Facades\Auth;
答案 3 :(得分:0)
我解决了它通过路径中的数据将用户传递给事件:
Route::group(['middleware' => ['xxxx']], function () {
event(new NameEvent($data));
Route::auth();
});