2015-05-04 38 views
0

我對Laravel非常陌生,並且正在嘗試爲用戶實現角色。Laravel 5檢查角色給出錯誤「嘗試獲取非對象的屬性」

  1. 我已經創建與它
  2. 相關聯的角色表和模型我添加了一個列roleusers表。
  3. 我現在試圖去檢查在User模型

編輯角色:一個答案/這裏的解釋後,我在users表改變rolerole_id但我仍然得到同樣的錯誤。

這裏是我的用戶模型...

<?php namespace App; 

use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 
use Auth; 

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    use Authenticatable, CanResetPassword; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    // more stuff 

    public function role() 
    { 
     return $this->belongsTo('App\Role'); 
    } 

    public function isAdmin() 
    { 
     return $this->role->slug == 'admin'; 
    } 

} 

而且我的榜樣

<?php namespace App; 

use Illuminate\Database\Eloquent\Model as Eloquent; 

class Role extends Eloquent { 

    protected $table = 'roles'; 

    public function users() 
    { 
     return $this->hasMany('App\User'); 
    } 

} 

當我去我的管理頁面,我有以下功能...

public function index(User $user) 
{ 
    if ($user->isAdmin()) { 
     return view('admin/home_admin'); 
    } 
    else { 
     return redirect('home'); 
    } 
} 

但是我得到錯誤...

嘗試獲取User.php中非對象的屬性62行 HandleExceptions-> handleError('8','試圖獲取非對象的屬性 ','/ home/vagrant/Code/esearch /應用程序/ user.php的」,‘62’,62

我試圖此而在記錄和不與正確的角色登錄陣列()) 在user.php的線。我在這裏錯過了很明顯的東西嗎

+0

在最後一個面板中更改您的User to Guard。這應該是你正在尋找的修復。或者你可以直接使用'Auth :: user() - > isAdmin()' –

+1

這個工作謝謝 – Adrian

回答

2

代碼問題始於@ user3158900注意到的role_id設置。這是需要解決的問題。

但是當您嘗試查看發生了什麼時,您正在使用不正確的用戶形式。代替User $user,您需要Guard $userGuard $auth,因爲它更常見。您也可以使用Auth::user()->isAdmin()

還有最後一件事應該看看,我在上面的評論中沒有提到。

如果用戶未登錄並且是訪客,您將在嘗試查找Auth::user()時遇到錯誤,並且會失敗。這是因爲當你是一個客人時,Auth::user()爲空。所以你應該做一個檢查登錄。

你可以使用!Auth::guest()Auth:check()(這是更清潔)。

希望這對你有好處!

+0

感謝您的解釋,即時通訊不能確定哪個將被視爲正式的正確答案,因爲這兩個修復程序都是必需的。 – Adrian

1

你就近了。 Laravel假定外部角色爲role_id,但由於您使用的是role,因此您需要在關係中設置該外鍵。

在您的Role模型中。

public function users() 
{ 
    return $this->hasMany('App\User', 'role'); 
} 

在您的User模型中。

public function role() 
{ 
    return $this->belongsTo('App\Role', 'role'); 
} 

因爲role都希望能與一個功能,在您的表中的列,這將是最好修改列名role_id匹配的內容Laravel期待。

+0

感謝您的幫助,雖然我得到一個錯誤,未定義的屬性:App \ User :: $在BelongsTo.php中的作用行74. 我仔細檢查,以確保'角色'是我在用戶表中的列名稱,但仍然沒有運氣。 – Adrian

+0

對不起,我剛剛意識到關係名稱和列名稱是相同的,所以當您嘗試使用'$ user-> role'時,我不確定它是否會返回'role'列或關係中的內容你設置。是否可以撤銷我告訴你的內容,只是將'role'表列改爲'role_id'? – user3158900

+0

我最終做到了這一點,儘管我似乎回到了一個Im得到「嘗試獲取非對象屬性」的錯誤,這非常奇怪(這次是以role_id爲列名)。我感覺它的東西很小,但感謝您的幫助。 – Adrian

相關問題