2014-03-26 1 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; 

Role Model:

<?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'); 
        } 
сообщение 210

Ошибка:

BadMethodCallException Призыв к неопределенным метод Осветите \ Database \ Query \ Builder :: hasRole()

Сообщение об ошибке представляется, когда оператор IF работает, в то время как пользователь входит в систему. Я следовал инструкциям Entrust, но я не понимаю, почему он не подбирает метод.

Любая помощь была бы чрезвычайно оценена!

ответ

1

Попробуйте изменить: $ user = User :: where ('id', '=', $ id); to $ user = User :: find ($ id);

Пользователь :: где понадобится -> получить, чтобы вернуть то, что вы хотите, и даже тогда оно вернет коллекцию; вам нужно что-то вроде User :: where (etc) -> first(); чтобы вы получили один экземпляр пользователя. На самом деле, поскольку вы извлекаете по id, вот что -> find ($ id) предназначено для и что вам нужно делать.

+0

Чтобы уточнить, -> где возвращается объект Query Builder, который ожидает, что он будет привязан к другим методам построения, например, больше где(), sum() и т. Д. И т. Д. Вы должны «закончить» свой запрос с помощью либо a -> get(), чтобы вернуть коллекцию, либо -> first() (которая вернет первый результат из вашей коллекции). В противном случае -> find() пропускает все это и является самым простым способом захвата чего-то своим основным ключом :) – John

+0

Спасибо, Джон, это наиболее полезно. Вы объясните это яснее, чем руководство Laravel! Сейчас это работает. Еще раз спасибо. – Ben

+1

Без проблем, рад, что я мог бы помочь! Я согласен, что Laravel docs закончил тем, что оставил мне больше вопросов, чем ответов. Некоторое время понадобилось поиграть, чтобы получить хорошее представление о вещах. Держись, и все начнет иметь больше смысла! – John

Смежные вопросы