2016-11-24 22 views
0

登錄我在我的用戶模型的方法是:Laravel呼籲用戶的方法,如果沒有

public function hasRole($roles) 
{ 
    foreach ($roles as $role) { 
     if ($role === $this->role_id) { 
      return true; 
     } 
    } 

    return false; 
} 

而且我通過檢查這個方法添加一個類來我的應用程序的身體返回:

<div id="spark-app" v-cloak class="{{ (Auth::user()->hasRole([1]) ? 'customer' : '') }}"> 

這正確的工作,但如果沒有登錄用戶,我當然會收到一個錯誤。

Call to a member function hasRole() on null 

有沒有辦法在檢查是否有用戶的同時仍然使用這個速記語句?

我可以將簡寫包裝在內聯if語句中,但感覺凌亂。有沒有更好的方法來處理這個問題?

+0

你可以在控制器上做一個輔助方法,在檢查它是否有角色之前先檢查isset(Auth :: user())。然後在刀片上調用你的方法 –

回答

1

試試這個:

<div id="spark-app" v-cloak class="{{ (null !== Auth::user() && Auth::user()->hasRole([1]) ? 'customer' : '') }}"> 

編輯:@ AntoineB的解決方案是絕對乾淨。

6

Laravel提供了一種檢查用戶是否登錄的方法,即Auth::check()(請參見documentation)。

<div id="spark-app" v-cloak class="{{ (Auth::check() && Auth::user()->hasRole([1]) ? 'customer' : '') }}"> 
+2

這是正確的解決方案,如果可能,請包含文檔鏈接:https://laravel.com/docs/5.3/authentication – phobia82

+0

我最初嘗試過,但遇到同樣的錯誤。原來我還在另一個地方叫hasRole,所以現在已經解決了。 – Lovelock