Я переместил модель User из каталога приложений по умолчанию в приложение / Модели.
Я обновил пространство имен в User to 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/" } },
Что я пропустил?
Вам необходимо обновить файл config / auth.php . Измените 'model' => 'App\User'
на 'model' => 'App\Models\User'
.
Не забывайте очищать кеш после всех предыдущих изменений
php artisan config:clear
Не забудьте изменить пространство имен User.php
.
Например, если ваша модель пользователя находится в /App/User.php
тогда первая строка должна /App/User.php
образом:
<?php namespace App;
Однако, если вы создали каталог /Models
и ваша модель пользователя теперь находится в /App/Models/User.php
, первая строка User.php должна ссылаться на это новое пространство имен:
<?php namespace App\Models;
Надеюсь, это поможет.
* Примечание. Моя тактика, вероятно, технически «неверна», поскольку она загрязняет глобальное пространство имен. Тем не менее, мне не удалось заставить другие ответы работать и опубликовать это только в крайнем случае. *
Я сделал это несколько иначе, чем другие ответы. Я также использую 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's 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@domain.com', 'password' => Hash::make('my raw dev password')] ]; foreach($users as $user){ \User::create($user); } } } ?>
После того, как все эти обновления были выполнены, в командной строке я запустил:
composer dump-autoload php artisan migrate --seed
Надеюсь это поможет!
Не забудьте изменить
use App\User;
в
use App\Models\User;
в AuthController.php
Если у вас есть ваши модели в определенной папке, вам нужно запустить
composer dump-autoload
обновить 🙂