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 包中使用自定义图标字体显示问号而不是自定义图标