在Laravel中找不到“用户”类

时间:2013-04-04 01:57:50

标签: php laravel eloquent laravel-3

我一直在

Unhandled Exception
Message:

Class 'User' not found

Location:

C:\wamp\www\laravel\laravel\auth\drivers\eloquent.php on line 70

当我登录用户时。我不认为eloquent.php有任何问题。请查看我的登录控制器

class Login_Controller extends Base_Controller {

    public $restful = true;

    public function get_index(){
        return View::make('login');
    }

    public function post_index(){

        $username = Input::get('username');
        $password = Input::get('password'); 
        $user_details = array('username' => $username, 'password' => $password);

        if ( Auth::attempt($user_details) )
        {
            return Redirect::to('home.index');
        }
        else
        {
            return Redirect::to('login')
                ->with('login_errors', true);
        }


    }
}

这是登录的视图

{{ Form::open('login') }}
    <!-- username field -->
    <p>{{ Form::label('username', 'Username') }}</p>
    <p>{{ Form::text('username') }}</p>
    <!-- password field -->
    <p>{{ Form::label('password', 'Password') }}</p>
    <p>{{ Form::password('password') }}</p>
    <!-- submit button -->
    <p>{{ Form::submit('Login', array('class' => 'btn btn-primary')) }}</p>
{{ Form::close() }}

routes.php

<?php

Route::controller(Controller::detect()); // This line will map all our requests to all the controllers. If the controller or actions don’t exist, the system will return a 404 response.
Route::get('about', 'home@about');


Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('login');
});

我使用Eloquent作为我的身份验证驱动程序。我尝试将其更改为Fluent,但在我单击登录按钮后,它会在else语句中显示此行return Redirect::to('login')->with('login_errors', true);发出的登录错误。

使用Eloquent时“用户”类有什么问题?

2 个答案:

答案 0 :(得分:4)

迈克是对的,这是因为你没有用户模型,但还有更多...

laravel搜索用户模型但未找到它的行如下:

if ( Auth::attempt($user_details) )

这是因为Laravels身份验证系统默认使用雄辩的驱动程序。要满足Laravel,你需要一个名为'users'的数据库表,至少包含text'类型的'username'和'password'列,也可能在使用时间戳时列'created_at'和'updated_at',但你可以关闭它。 / p>

\application\models\user.php

<?PHP 
class User extends Eloquent
{    
    public static $timestamps  = false; //I don't like 'em ;)
}

答案 1 :(得分:2)

这实际上是对@Hexodus回复的评论,但我没有必要的评论要点。

您实际上可以根据需要命名用户身份验证,例如

  • 型号:Turtle
  • 表:turtles

但您必须进入app\config\auth.php并更改'model' => '...''table' => '...'值才能使Laravel的身份验证生效。

另外,according to the docs,您甚至不需要在数据库中明确定义'username''password'

if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
  return Redirect::intended('dashboard');
}
  

请注意,'email'不是必需的选项,仅用于举例。您应该使用与数据库中的“用户名”对应的任何列名称。 Redirect :: expected函数会将用户重定向到他们在被身份验证过滤器捕获之前尝试访问的URL。如果目标目的地不可用,则可以为此方法提供回退URI。

实际上,此实例中的'email'被视为'username'


编辑,因为我一开始遇到问题,当您使用Auth::attempt(...)时,需要哈希密码。