【发布时间】:2019-03-17 10:11:14
【问题描述】:
您能否帮助我了解扩展现有模型的正确方法?我正在开发一个包,并希望尽可能多地与主应用程序分开。
我想拥有User 模型的所有现有功能,但只添加与另一个模型的关系。在我的包裹User 我可以有几个(hasMany)Article。我没有向\App\User 添加方法,而是在我的包class User extends \App\User 中创建了一个新模型:
namespace Package\Sample;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
/**
* Class User
* @package Package\Sample
*/
class User extends \App\User
{
use HasApiTokens, Notifiable;
public function articles()
{
return $this->hasMany(Article::class);
}
}
为了让它工作,我为我的包auth.php添加了配置:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => \Package\Sample\User::class,
],
],
'guards' => [
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
我的问题:扩展现有模型的功能是否是“最佳实践”?
【问题讨论】:
-
看看 spatie 是怎么做的:他们不接触用户模型,他们要求用户使用特征。 github.com/spatie/laravel-permission/tree/master/src/Traits
-
@Kyslik 不错!一个很好的例子。谢谢!在 [文档|github.com/spatie/laravel-permission#usage] 中,假设将特征
Spatie\Permission\Traits\HasRoles添加到User模型中,这是我想要避免的。我想以编程方式执行此操作,并且在安装包时不需要它。我不知道这是否可能,这就是我要求最佳实践的原因。也许在安装过程中要求添加一个特征是一个最佳实践:)
标签: laravel laravel-5.7 package-development