7

处理包含两个用户模型的继承 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 上进行了查找和替换并对问题进行了排序。

4

4 回答 4

3

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

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

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

public function register()
{
    Spark::useUserModel('App\Models\User');
    Spark::useTeamModel('App\Models\Team');
}

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

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

来源:Laravel Spark 6.0 自定义

2020 年 1 月 5 日更新:记住还要将 .env 中的值STRIPE_MODEL和值更新到新命名空间。BRAINTREE_MODEL

Laravel Spark 9.0 移除了对 Braintree 的支持,因此您只需要CASHIER_MODEL在 9.0 中更新即可。

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

于 2018-09-02T19:38:38.740 回答
2

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

namespace App\Models;
于 2016-11-23T12:27:29.013 回答
2

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

namespace App\Models;
于 2016-11-23T12:15:38.337 回答
2

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

namespace App\Models;
于 2016-11-23T12:19:00.707 回答