Laravel 在包中使用自定义 USER-Model

Posted

技术标签:

【中文标题】Laravel 在包中使用自定义 USER-Model【英文标题】:Laravel use custom USER-Model in package 【发布时间】:2018-06-18 16:40:17 【问题描述】:

我在 Laravel 中开发了一个存储在 LaravelRoot/packages/myname/project/ 中的包。

在我的包中,我必须使用一个扩展的用户模型,其中包含默认用户模型中未提及的关系。

现在这是我的问题: 如何覆盖我的包中的默认用户模型?


更多细节:

如果我在我的包中通过Auth::user() 接收当前用户,我将使用默认的App\User 接收一个对象。

我扩展了这个模型,现在包含一个新的关系函数,存储在LaravelRoot/packages/myname/project/src/App/Models/User(命名空间:Myname\Myproject\App\Models)。 这是我的关系函数:

/**
 * The roles that belong to the user.
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function roles()

    return $this->belongsToMany(Role::class)->withTimestamps();

这个关系只在我的包中使用,所以我不想把这个函数存储在默认的App\User中。是否可以在我的包中使用Auth::user() 接收我的扩展用户模型的对象,还是每次我需要这个时我都必须手动接收?

【问题讨论】:

你为什么不希望在你的类中有一个方法?一种方法比两种模型更好。 @shukshin.ivan 因为我将在许多其他项目中使用这个包。将这个包添加到一个新项目现在只包含两个步骤: 1. 在目录结构中添加包。 2. 添加我的 package-service-provider。将此功能添加到默认用户模型会每次添加此功能都会受到影响,我想使用我的包。 或者创建一个特征并在你的用户模型中调用它!并将其作为要求添加到您的包中! 【参考方案1】:

我认为,最简单的方法是通过扩展 App\User 模型来制作你的包模型。您只需打开config/auth.php 并设置您的模型类。

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => Project\Models\User::class,
    ],

您将通过Auth::user()获得正确的模型。

【讨论】:

谢谢,这是正确的提示!现在我已将config(['auth.providers.users.model' => Myname\Myproject\App\Models\User::class]); 添加到我的 package-service-provider 中的引导方法中。 @NeronNF,谢谢伙计,它真的帮助我挣扎了一个小时

以上是关于Laravel 在包中使用自定义 USER-Model的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 6 在我的包中使用 auth 进行自定义防护?

在 Flutter 包中使用自定义图标字体显示问号而不是自定义图标

在包中定义类

在包中覆盖“defun”

我应该如何在 Laravel 包中输入提示 UserModel?

golang gin-gonic 和在包中拆分文件