2013-04-04 3 views
2

Я получаюClass «Пользователь» не найден в Laravel

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', '[email protected]'); 


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

Я Красноречивый, как мой драйвер аутентификации. Я попробовал изменить его на Fluent, но после того, как я нажму кнопку входа в систему, он отображает ошибку входа в эту строку return Redirect::to('login')->with('login_errors', true); в инструкции else.

Что случилось с классом «Пользователь» при использовании Eloquent?

+1

Ваш пример. Я НЕ видел: 'class User {...}' поэтому не определено –

+0

Действительно, 'Пользователь' должен быть моделью. Убедитесь, что у вас есть файл 'user.php' в папке' models'. –

ответ

4

право Майка, это потому, что вы не имеете модели пользователя, но есть еще ...

линия, где поиск Laravel для модели пользователя и не найдя его заключается в следующем:

if (Auth::attempt($user_details)) 

Это происходит потому, что система аутентификации Laravels использует по умолчанию драйвер для красноречия. Чтобы удовлетворить Laravel, вам нужна таблица базы данных с именем «пользователи» с по меньшей мере именами столбцов «имя пользователя» и «пароль» текста типа и, возможно, также созданные столбцы «created_at» и «updated_at» при использовании временных меток, но вы можете отключить его.

\application\models\user.php 

<?PHP 
class User extends Eloquent 
{  
    public static $timestamps = false; //I don't like 'em ;) 
} 
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'); 
} 

принять к сведению, что «электронная почта» не является обязательной опцией, она используется просто для пример. Вы должны использовать любое имя столбца, соответствующее «имени пользователя» в вашей базе данных. Функция Redirect :: предназначается для перенаправления пользователя на URL-адрес, к которому они пытались получить доступ, прежде чем его поймает фильтр проверки подлинности. Резервный URI может быть предоставлен этому методу в случае, если предназначенный пункт назначения недоступен.

Эффективно, 'email' в данном случае считается 'username'


Edit, и потому, что у меня была проблема с этим в первую, вы не нужно хэширования паролей при использовании Auth::attempt(...).