简体   繁体   English

如何在存储新资源时将回调 function 添加到 Laravel Nova?

[英]How can I add a callback function to Laravel Nova on storing a new resource?

In Nova's ResourceStoreController.php, I can see this code:在 Nova 的 ResourceStoreController.php 中,我可以看到这段代码:

$model = DB::transaction(function () use ($request, $resource) {
    [$model, $callbacks] = $resource::fill(
        $request, $resource::newModel()
    );

    if ($request->viaRelationship()) {
        $request->findParentModelOrFail()
                ->{$request->viaRelationship}()
                ->save($model);
    } else {
        $model->save();
    }

    ActionEvent::forResourceCreate($request->user(), $model)->save();

    collect($callbacks)->each->__invoke();

    return $model;
});

Which certainly looks like I should be able to set a callback function to it looking at this line:这当然看起来像我应该能够设置一个回调 function 看这一行:

collect($callbacks)->each->__invoke();

But how can I set a callback for a particular resource in Laravel Nova?但是如何为 Laravel Nova 中的特定资源设置回调?

Basically, I want to trigger an event or callback when I store a new resource, but only when the resource is created through nova.基本上,我想在存储新资源时触发事件或回调,但仅在通过 nova 创建资源时。

For Nova <= 2.x:对于 Nova <= 2.x:

I was able to accomplish this with a hidden field as of Nova's latest version, then just using normal laravel observers to check for the field on update.从 Nova 的最新版本开始,我能够使用隐藏字段来完成此操作,然后只需使用普通的 laravel 观察者来检查更新时的字段。

Updated November 2020 for Nova ^3.0+: Nova ^3.0+ 于 2020 年 11 月更新:

You can now create a Laravel Observer specific for your Nova usages and tell Nova to use it by adding this to your NovaServiceProvider:你现在可以为你的 Nova 使用创建一个 Laravel 观察者,并告诉 Nova 通过将它添加到你的 NovaServiceProvider 来使用它:

Nova::serving(function () {
    User::observe(UserObserver::class);
});

Docs here:这里的文档:

https://nova.laravel.com/docs/3.0/resources/#resource-eventshttps://nova.laravel.com/docs/3.0/resources/#resource-events

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM