ganyicz/nova-callbacks

为您的Laravel Nova资源添加保存后回调。

1.1.5 2022-06-24 12:56 UTC

This package is auto-updated.

Last update: 2024-09-24 18:04:40 UTC


README

Banner

缺失的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

用法

  1. 在您的资源上应用HasCallbacks特质。
  2. 定义其中一个回调函数。

提示:在您的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特质公开的fillfillForUpdate方法,以添加基于闭包的模型事件监听器。在模型保存后,我们简单地调用您在资源中定义的回调函数。

注意

由于实现基于saved模型事件,在回调函数内部保存模型本身将导致无限循环。如果您确实需要在回调中保存模型,请使用saveQuietly(),这样就不会分发事件。

如上所述,此包提供的特质覆盖了您的资源上的fillfillForUpdate方法。