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 引用了 User
和 Team
模型,因此单独更改命名空间是行不通的。
您不应该编辑 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_MODEL
和 BRAINTREE_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