未找到Laravel 5用户模型

时间:2015-02-14 14:12:01

标签: php laravel laravel-5

我已将用户模型从默认的app目录移动到app / Models。

我已将用户名中的名称空间更新为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/"
    }
},

我错过了什么?

6 个答案:

答案 0 :(得分:123)

您需要更新 config / auth.php 文件。将'model' => 'App\User'更改为'model' => 'App\Models\User'

答案 1 :(得分:10)

不要忘记在所有先前的更改后清除缓存

php artisan config:clear

答案 2 :(得分:7)

不要忘记更改User.php命名空间。

E.g。如果您的用户模型位于/App/User.php,则第一行应显示为:

<?php namespace App;

但是,如果您已创建/Models目录并且您的用户模型现在位于/App/Models/User.php,则User.php的第一行应引用此新命名空间:

<?php namespace App\Models;

希望有所帮助。

答案 3 :(得分:2)

*注意:我的策略可能在技术上“不正确”,因为它会污染全局命名空间。但是,我无法得到其他答案,并将其作为最后的手段发布。 *

我这样做的方式与其他答案略有不同。我也在使用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',

供参考,这是我的用户表迁移:

<?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

希望这有帮助!

答案 4 :(得分:0)

别忘了改变

use App\User;

use App\Models\User;
AuthController.php中的

答案 5 :(得分:0)

如果您的模型位于特定文件夹中,则需要运行

composer dump-autoload 

刷新:)