如何将Laravel 5.1中的User模型移至\App\Models\User?

25

我能否告诉Laravel我已经移动了User.php模型?

Laravel 5.1

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

我不喜欢在 Laravel 5.1 的 App 文件夹中放置所有模型,因此我创建了一个新文件夹并将所有模型 PHP 文件放置在其中:\App\Models

我修改了认证控制器来使用新的use App\Models\User; 并更正了模型文件夹中的所有模型文件。

然而,当我加载页面时,会出现上述错误。

(当然,其他模型文件因为是我的代码访问它们所以工作正常,问题只出现在 Laravel 5.1 的预构建认证部分)

2个回答

40

您需要修改 Project/config/auth.php 文件中的 'model'=>AppName\Models\User::class,


4
移动类后不要忘记运行composer dump-autoload。 - Snapey
你能解释一下这段代码在做什么,以及为什么需要更改吗?谢谢。 - ejntaylor

35

例如,如果您创建了一个文件夹(例如app/Models),有两种方法可以移动您的模型:

1)Laravel5风格=使用PSR4

将所有模型文件的命名空间设置为App\Models; 通过完整的命名空间访问您的模型,在任何地方都可以这样做,例如:\App\Models\User::find(1);

2)Laravel4风格

使用composer自动加载器加载您的模型。在composer.json中添加:

"autoload": {
        "classmap": [
            "database",
            "app/Models"            
        ],
        ...

您不需要为模型设置命名空间。它们位于根命名空间中。 在有命名空间的文件中,您可以使用 \User::find(1); 访问它们。

额外说明:

  • 如果更改 User 模型的命名空间,则必须更新 config\auth.php => 'model'=> App\Models\User::class

  • 摆脱冗长的命名空间最简单的方法是在 PHP 文件开头导入您的模型,例如: use App\Models\User;

链接:


如果我们这样做:User::find(1); 并且在开头定义了命名空间(use App\User;),那么它仍然符合PSR4标准吗? - Omer Farooq
为了获得最佳效果,我建议您执行所有三个步骤(包括额外的注意事项),特别是如果您已经进行到一半并希望实现此更改。 - Bobby Axe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接