Wai*_*ein 3 laravel laravel-nova
我正在使用Laravel Nova开发一个Web管理面板。
由于Nova是一项相当新的技术,所以我遇到了一个问题。
我现在想做的是添加一个隐藏字段或扩展或覆盖create方法。
这是我的情况。让我们保存一下,我有一个vacancy具有以下字段的nova资源。
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Title')->sortable(),
Text::make('Salary')->sortable()
// I will have another field, called created_by
];
}
Run Code Online (Sandbox Code Playgroud)
很简单的。我想做的是要created_by在数据库中添加一个新字段。然后,该字段将被当前登录的用户id($request->user()->id)自动填充。
如何覆盖或扩展Nova的创建功能?我该如何实现?
我可以使用资源事件,但是如何获取事件中的登录用户?
Ele*_*ska 10
您正在寻找的是Resource Events。
从文档:
所有Nova操作都使用您熟悉的典型的save,delete,forceDelete,restore Eloquent方法。因此,很容易监听Nova触发的模型事件并对它们做出反应。最简单的方法是将模型观察者简单地附加到模型上:
如果您不想创建一个新的可观察对象,也可以boot在雄辩的模型中创建一个方法,如下所示:
public static function boot()
{
parent::boot();
static::creating(function ($vacancy) {
$vacancy->created_by = auth()->user()->id;
});
}
Run Code Online (Sandbox Code Playgroud)
但是请注意,这些要比可观察的要难一些,而且您或将来的下一个开发人员可能会scratch不休,想知道“ created_at”属性的设置如何。
在我看来你应该去Observers。观察者将使您的代码更具可读性和可跟踪性。
以下是您如何使用 Laravel Observers 实现相同的目标。
AppServiceProver.php
public function boot()
{
Nova::serving(function () {
Post::observe(PostObserver::class);
});
}
Run Code Online (Sandbox Code Playgroud)
PostObserver.php
public function creating(Post $post)
{
$post->created_by = Auth::user()->id;
}
Run Code Online (Sandbox Code Playgroud)
或者
您可以简单地Nova使用元来破解一个字段。
Text::make('created_by')->withMeta(['type' => 'hidden', 'value' => Auth::user()->id])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4013 次 |
| 最近记录: |