我正在使用Laravel Nova开发一个Web管理面板。
我有一个问题,因为新星是一个相当新的技术。
我现在要做的是添加一个隐藏字段,或者扩展或覆盖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
];
}
很简单,我想在数据库中添加一个名为created_by
的新字段,然后该字段将自动填充为当前登录用户id
($request->user()->id
)。
如何覆盖或扩展Nova的创建功能?如何实现?
我可以使用资源事件,但如何在事件中检索登录的用户?
5条答案
按热度按时间67up9zun1#
您要查找的是资源事件。
来自文档:
所有Nova操作都使用您所熟悉的典型的save、delete、forceDelete、restore Eloquent方法。因此,很容易监听由Nova触发的模型事件并对它们做出React。最简单的方法是将模型观察器连接到模型上:
如果你不想创建一个新的可观察对象,你也可以在你的雄辩模型中创建一个
boot
方法,如下所示:但是请注意,这些比可观察性更难跟踪,您或未来的开发人员可能会挠头,想知道“created_at”属性是如何设置的。
y1aodyip2#
在我看来,你应该选择
Observers
。观察者会让你的代码更具可读性和可跟踪性。下面是如何实现相同的Laravel观察员。
AppServiceProvider.php
PostObserver.php
或
您可以使用
withMeta
简单地破解Nova
字段。ezykj2lf3#
你也可以直接在你的Nova资源中完成。每个Nova资源都有
newModel()
方法,当资源从数据库中加载你的模型的新示例时,它会被调用。你可以覆盖它,并在那里放置你的逻辑来设置任何默认值(您应该始终检查值是否已经存在,并且仅在它们为空时才设置,这仅在第一次创建模型时才会发生,这是您实际需要的):kx1ctssn4#
a)使用以下命令创建Observer类:
php artisan make:observer -m "Post" PostObserver
b)在PostObserver中添加以下代码:
$post->created_by = Auth::user()->id;
c)在AppServiceProvider.php中注册PostObserver
详细说明:https://medium.com/vineeth-vijayan/how-to-add-a-new-field-in-laravel-nova-resource-87f79427d38c
insrf1ej5#
自Nova v3.0起,有一个本地隐藏字段。
用法:
文件:https://nova.laravel.com/docs/3.0/resources/fields.html#hidden-field