处理包含两个用户模型的继承 Laravel Spark 项目。
一个是 App 目录中的标准 Spark 模型,另一个在 App/Models 中。我结合了这两个模型并更新了 auth.php 以引用模型目录中的用户模型,但 composer dump-autoload 说它找不到应用程序/用户模型。
我怎样才能告诉自动加载器用户模型已经不存在了,但是 而不是在 Models 目录中?
编辑:
我已将命名空间更改为 App/Models 但仍然收到错误:
class_parents(): Class App\User does not exist and could not be loaded
在运行 dump-autload 时在我的终端中
第二次编辑:
已修复,没有意识到 namespace 被引用了这么多。在 App\User 上找到并替换并解决了问题。
最佳答案
标准的 Laravel 安装将通过简单地更改命名空间来工作,就像其他人提到的那样;但是 Laravel Spark 引用了 User
和 Team
模型,因此仅更改 namespace 是行不通的。
你不应该编辑 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
目录,而不是使用上面的示例。
最后,您需要更新对模型所做的任何引用,例如将 Controller 从 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
中。
关于php - Laravel 5 - 将用户模型移动到应用程序/模型导致自动加载问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40764287/