Laravel 5 未找到用户模型
Laravel 5 User Model not found
我已将用户模型从默认应用程序目录移至 app/Models。
我已将 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'
。
不要忘记更改您的 User.php
命名空间。
例如如果您的用户模型位于 /App/User.php
那么第一行应该是:
<?php namespace App;
但是,如果您创建了一个 /Models
目录并且您的用户模型现在位于 /App/Models/User.php
,User.php 的第一行应该引用这个新的命名空间:
<?php namespace App\Models;
希望对您有所帮助。
* 注意:我的策略在技术上可能是 'incorrect',因为它会污染全局命名空间。但是,我无法让其他答案正常工作,post 这只是作为最后的手段。 *
我做这个的方式与其他答案略有不同。我也在使用 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) 我在 composer.json 的自动加载部分添加了 "app/Models":
"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',
作为参考,这是我的用户 table 迁移:
<?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
不要忘记在之前的所有更改后清除缓存
php artisan config:clear
如果您的模型位于特定文件夹中,则需要 运行
composer dump-autoload
刷新:)
我已将用户模型从默认应用程序目录移至 app/Models。
我已将 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'
。
不要忘记更改您的 User.php
命名空间。
例如如果您的用户模型位于 /App/User.php
那么第一行应该是:
<?php namespace App;
但是,如果您创建了一个 /Models
目录并且您的用户模型现在位于 /App/Models/User.php
,User.php 的第一行应该引用这个新的命名空间:
<?php namespace App\Models;
希望对您有所帮助。
* 注意:我的策略在技术上可能是 'incorrect',因为它会污染全局命名空间。但是,我无法让其他答案正常工作,post 这只是作为最后的手段。 *
我做这个的方式与其他答案略有不同。我也在使用 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) 我在 composer.json 的自动加载部分添加了 "app/Models":
"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',
作为参考,这是我的用户 table 迁移:
<?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
不要忘记在之前的所有更改后清除缓存
php artisan config:clear
如果您的模型位于特定文件夹中,则需要 运行
composer dump-autoload
刷新:)