Ответ 1
Вам необходимо обновить файл config/auth.php. Измените 'model' => 'App\User'
на 'model' => 'App\Models\User'
.
Я переместил модель 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/"
}
},
Что я пропустил?
Вам необходимо обновить файл config/auth.php. Измените 'model' => 'App\User'
на 'model' => 'App\Models\User'
.
Не забывайте очищать кеш после всех предыдущих изменений
php artisan config:clear
Не забудьте изменить пространство имен 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 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
Надеюсь, это поможет!
Не забудьте изменить
use App\User;
к
use App\Models\User;
в AuthController.php
Если у вас есть ваши модели в определенной папке, вам нужно запустить
composer dump-autoload
чтобы обновить:)