Zizaco Entrust'hasRole'不在Laravel控制器中工作

时间:2014-03-26 20:11:49

标签: laravel laravel-4

用户模型:

<?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       调用未定义的方法Illuminate \ Database \ Query \ Builder :: hasRole()

当用户登录时,IF语句正在运行时会显示错误消息。我已按照Entrust的说明进行操作,但我不知道为什么它没有接收到方法

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

尝试更改:$ user = User :: where(&#39; id&#39;,&#39; =&#39;,$ id); to $ user = User :: find($ id);

用户::需要的地方 - &gt;得到你想要的东西,即使这样它也会返回一个集合;你会想要像User :: where(etc) - &gt; first();确保您拥有一个User实例。实际上,既然你是通过id检索的,那就是 - &gt; find($ id)是为什么设计的,以及你应该做什么。