ganyicz / nova-callbacks
为您的Laravel Nova资源添加保存后回调。
Requires
- php: ^7.2.5|^8.0
- laravel/nova: ^3.0|^4.0
README
缺失的Nova资源回调函数
此包支持在资源类内部直接定义回调函数。
use Illuminate\Http\Request; use Ganyicz\NovaCallbacks\HasCallbacks class User extends Resource { use HasCallbacks; public function fields(Request $request) { return []; } public static function beforeSave(Request $request, $model) { // Do something before the model is created or updated } public static function afterSave(Request $request, $model) { // Do something after the model is created or updated } public static function beforeCreate(Request $request, $model) { // Do something before the model is created } public static function afterCreate(Request $request, $model) { // Do something after the model is created } public static function beforeUpdate(Request $request, $model) { // Do something before the model is updated } public static function afterUpdate(Request $request, $model) { // Do something after the model is updated } }
为什么?
目前,如果您想在资源保存后执行任何操作,您必须在外部资源类中定义模型观察者。这只会让代码更难查找。此包特别适用于您只想在资源保存后执行简单逻辑的情况,因为所有内容都可以保留在一个文件中。
为了扩展功能,请查看我的另一个包 Nova Temporary Fields,它允许您创建不会持久化到模型中的自定义字段,并且仅在回调中可用。
安装
您可以通过composer安装此包
composer require ganyicz/nova-callbacks
用法
- 在您的资源上应用
HasCallbacks
特质。 - 定义其中一个回调函数。
提示:在您的Nova文件夹内您的基类资源中应用此特质,这样回调函数就可以在您的新资源中使用。
可用回调
public static function beforeSave(Request $request, $model)
在创建和更新资源之前调用
public static function afterSave(Request $request, $model)
在创建和更新资源之后调用
public static function beforeCreate(Request $request, $model)
在创建新资源之前调用
public static function afterCreate(Request $request, $model)
在创建新资源之后调用
public static function beforeUpdate(Request $request, $model)
在更新现有资源之前调用
public static function afterUpdate(Request $request, $model)
在更新现有资源之后调用
它是如何工作的?
实现非常简单。在Nova填充模型之前,我们覆盖了由Laravel\Nova\FillsFields
特质公开的fill
和fillForUpdate
方法,以添加基于闭包的模型事件监听器。在模型保存后,我们简单地调用您在资源中定义的回调函数。
注意
由于实现基于saved
模型事件,在回调函数内部保存模型本身将导致无限循环。如果您确实需要在回调中保存模型,请使用saveQuietly()
,这样就不会分发事件。
如上所述,此包提供的特质覆盖了您的资源上的fill
和fillForUpdate
方法。