Laravel 5 - 将用户模型移动到应用程序/模型导致自动加载问题

Posted

技术标签:

【中文标题】Laravel 5 - 将用户模型移动到应用程序/模型导致自动加载问题【英文标题】:Laravel 5 - Moved User model to App/Models causing autoload issues 【发布时间】:2017-04-07 10:51:12 【问题描述】:

处理包含两个用户模型的继承 Laravel Spark 项目。

一个是 App 目录中的标准 Spark 模型,另一个位于 App/Models 中。我已经合并了这两个模型并更新了 auth.php 以引用 Models 目录中的 User 模型,但是 composer dump-autoload 说它找不到 App/User 模型。

如何告诉自动加载器 User 模型不再存在,但是 而是在 Models 目录中?

编辑:

我已将命名空间更改为 App/Models 但仍然收到错误:

class_parents(): Class App\User does not exist and could not be loaded

运行 dump-autload 时在我的终端中

第二次编辑:

已修复,没有意识到命名空间被引用了这么多。在 App\User 上进行了查找和替换,并对问题进行了排序。

【问题讨论】:

你是否更新了 User.php 中的命名空间? 是的,已编辑问题:) 【参考方案1】:

标准的 Laravel 安装只需更改其他人提到的命名空间即可;但是 Laravel Spark 引用了 UserTeam 模型,因此单独更改命名空间是行不通的。

您不应该编辑 vendor/laravel/spark-aurelius 中的任何文件(aurelius 代号会因您的版本而异),因为这些更改不会被跟踪。

使用 Spark,您应该将以下行添加到您的 app/Providers/SparkServiceProvider.php

public function register()

    Spark::useUserModel('App\Models\User');
    Spark::useTeamModel('App\Models\Team');

您可以设置自己的自定义App\Models 目录,而不是使用上面的示例。

最后,您需要更新对模型所做的任何引用,例如将控制器从 use App\User 更新为 use App\Models\User

来源:Laravel Spark 6.0 Customization

2020 年 1 月 5 日更新:记得将 .env 中的 STRIPE_MODELBRAINTREE_MODEL 值更新为新命名空间。

Laravel Spark 9.0 移除了 Braintree 支持,因此您只需在 9.0 中更新 CASHIER_MODEL

2020 年 12 月 21 日更新:Laravel 8.x 现在默认将所有模型保存在 app\Models 目录中。即使您使用的是旧版本的 Laravel(例如 6.x)但使用的是 Laravel Spark 11,您也不需要执行上述任何操作。 Laravel Spark 11 将假设你的模型存在于app\Models

【讨论】:

注意:更新config/auth.php中的配置也是需要的。【参考方案2】:

你需要更改User模型命名空间:

namespace App\Models;

【讨论】:

是的,应该提到。命名空间是正确的。在终端我得到:class_parents(): Class App\User 不存在并且无法加载【参考方案3】:

尝试重命名命名空间。 :)

namespace App\Models;

【讨论】:

【参考方案4】:

更改命名空间,并像这样使用

namespace App\Models;

【讨论】:

以上是关于Laravel 5 - 将用户模型移动到应用程序/模型导致自动加载问题的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 5 Eloquent 模型移动到它自己的目录中

Laravel 5.3 用户模型中的 CanResetPassword

Laravel 5 Eloquent - 将计算值作为列添加到集合

Laravel 5.0 用户 Eloquent 模型嘲讽

Laravel 4:将模型从过滤器传递到控制器动作

Laravel 5 API授权,适用于使用Facebook进行授权的移动应用程序