如何在 laravel nova 上实施审批模型

How to implement for approval model on laravel nova

我有资源 Post,在创建或更新后,此 post 数据在批准模型中移动。

并且批准状态为:rejectrevisionapproved

如何在审批模式中实施,因为我已经厌倦了。谢谢

您的资源使用了 Model Events,因为 Nova 正在使用 Eloquent。

因此,假设您管理的状态为 select:


<?php

namespace App\Nova;

use Laravel\Nova\Fields\Select;

class Post
{
    public function fields()
    {
        return [
            ...

            Select::make('Status')->options([
                'approved' => 'Approved',
                'rejected' => 'Rejected',
                'revising' => 'Revising',
            ]);
        ];
    }
}

然后您将通过 listening for that event:

saving 上收听 post 的状态
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Post::observe(PostObserver::class);
    }
}
<?php

namespace App\Observers;

class PostObserver
{
    public function saving($post)
    {
        if($post->status == 'approved') {
            //
        }
    }
}

值得注意的是,saving()saved()

之前捕获了post

您可以在 Observer 中挂钩这些状态并执行更多行为。

因此,如果您想在状态更改时创建其他模型:

<?php

namespace App\Observers;

class PostObserver
{
    public function saving($post)
    {
        if($post->isDirty('status')) 
        {
            Approval::create([
                'post_id' => $post->id,
                'user_id' => auth()->id(),
                'status' => $post->status,
            ]);
        }
    }
}

或与状态更改相关的任何任务,例如发送邮件:

<?php

namespace App\Observers;

class PostObserver
{
    public function saving($post)
    {
        if($post->isDirty('status') && $post->status == 'rejected') 
        {
            Mail::to($post->author)->send(new PostRejected($post));
        }
    }
}

虽然,如果你有一个审批模型..我会说把它放在 created

的 ApprovalObserver 中

~布赖恩·迪林厄姆 (@im_brian_d)