2014-03-26 84 views
0

用戶模型:Zizaco委託 'hasRole' Laravel控制器內不工作

<?php 

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 
use Zizaco\Entrust\HasRole; 

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use HasRole; 

角色模型:

<?php 

use Zizaco\Entrust\EntrustRole; 

class Role extends EntrustRole 
{ 

} 

權限模型:

<?php 

use Zizaco\Entrust\EntrustPermission; 

class Permission extends EntrustPermission 
{ 

} 

用戶控制器:

public function postSignin(){ 
     if (Auth::attempt(array('email'=>Input::get('email'), 
           'password'=>Input::get('password')))) { 

      $id   = Auth::user()->id; 
      $user  = User::where('id','=',$id); 
      $firstname = Auth::user()->firstname; 

      if ($user->hasRole("User_Not_Approved")) { 
       return Redirect::intended('/users/dashboard'); 
        } 

錯誤消息:

BadMethodCallException 調用未定義的方法照亮\數據庫\查詢\生成器:: hasRole()

IF語句運行時給出錯誤信息,而用戶正在登錄。我遵循了Entrust的指示,但我爲什麼沒有采用該方法而感到不知所措。

任何幫助將非常感激!

回答

1

嘗試更改:$ user = User :: where('id','=',$ id);到$ user = User :: find($ id);

User ::哪裏需要 - >得到你想要的東西,然後它會返回一個集合;你會想要的東西像User :: where(etc) - > first();以確保你有一個用戶的單一實例。但實際上,因爲你是通過id檢索的,那就是 - > find($ id)是爲了什麼而設計的,你應該怎麼做。

+0

要澄清, - >在哪裏返回一個查詢生成器對象,它期望被鏈接到其他生成器方法,如更多的where(),sum()等等等。您必須「完成」您的查詢要麼 - > get()返回一個集合,要麼 - > first()(它會返回集合中的第一個結果)。否則 - > find()會跳過所有這些,並且是通過它的主鍵獲取某些東西的最簡單方法:) – John

+0

謝謝John,那是最有幫助的。你比Laravel指南更清楚地解釋它!它現在可以工作。非常感謝。 – Ben

+1

沒問題,很高興我能幫到你!我同意Laravel的文檔最終給我留下了更多的問題,而不是答案。它花了一段時間來玩弄正確的東西。堅持下去,事情就會變得更有意義! – John