Подтвердить что ты не робот

Модель пользователя Laravel 5 не найдена

Я переместил модель User из каталога приложений по умолчанию в приложение/Модели.

Я обновил пространство имен в User до namespace App\Models;, но я получаю эту ошибку:

FatalErrorException in EloquentUserProvider.php line 122:
Class '\App\User' not found

У меня есть правильная запись в моем json файле:

"autoload": {
    "classmap": [
        "database",
        "app/Modules",
        "app/Models"
    ],
    "psr-4": {
        "App\\": "app/",
        "Modules\\": "app/Modules/"
    }
},

Что я пропустил?

4b9b3361

Ответ 1

Вам необходимо обновить файл config/auth.php. Измените 'model' => 'App\User' на 'model' => 'App\Models\User'.

Ответ 2

Не забывайте очищать кеш после всех предыдущих изменений

php artisan config:clear

Ответ 3

Не забудьте изменить пространство имен User.php.

например. Если ваша модель пользователя находится в /App/User.php, тогда первая строка должна выглядеть следующим образом:

<?php namespace App;

Однако, если вы создали каталог /Models, и ваша модель пользователя теперь находится в /App/Models/User.php, первая строка User.php должна ссылаться на это новое пространство имен:

<?php namespace App\Models;

Надеюсь, что это поможет.

Ответ 4

* Примечание. Моя тактика, вероятно, технически "неверна", поскольку она загрязняет глобальное пространство имен. Тем не менее, мне не удалось заставить другие ответы работать и опубликовать это только в крайнем случае. *

Я сделал это несколько иначе, чем другие ответы. Я также использую Laravel 5.

1) Я создал каталог app/Models и переместил User.php в этот каталог.

2) Я изменил /app/Models/User.php, удалив пространство имен вверху. Это может загрязнять глобальное пространство имен, но это единственный способ заставить его работать.

<?php  // !!!! NOTICE no namespace here  !!!!!

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract {

    use Authenticatable, CanResetPassword;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['first_name', 'last_name', 'email', 'password'];

    /**
     * The attributes excluded from the model JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];

}

3) Я добавил "app/Models" в раздел автозагрузки в composer.json:

"autoload": {
    "classmap": [
        "database",
        "app/Models"    // <==== I added this               
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

4) Я изменил auth.php следующим образом:

/*
|--------------------------------------------------------------------------
| Authentication Model
|--------------------------------------------------------------------------
|
| When using the "Eloquent" authentication driver, we need to know which
| Eloquent model should be used to retrieve your users. Of course, it
| is often just the "User" model but you may use whatever you like.
|
*/

'model' => '\User',

Для справки, здесь моя миграция таблицы пользователей:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

И вот мой файл UsersTableSeeder.php:

<?PHP

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class UsersTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        $users = [
            [ 'id' => 1, 'first_name' => 'Bret', 'last_name' => 'Lastname', 'email' => '[email protected]', 'password' => Hash::make('my raw dev password')]
        ];

        foreach($users as $user){
            \User::create($user);
        }
    }
}

?>

После того, как все эти обновления были выполнены, в командной строке я побежал:

composer dump-autoload 
php artisan migrate --seed

Надеюсь, это поможет!

Ответ 5

Не забудьте изменить

use App\User;

к

use App\Models\User;

в AuthController.php

Ответ 6

Если у вас есть ваши модели в определенной папке, вам нужно запустить

composer dump-autoload 

чтобы обновить:)