如何在Laravel Nova上实现批准模型

问题描述

我有资源Post,并且在创建或更新后,该帖子数据会在批准模型中移动。

批准的状态为:rejectrevisionapproved

如何在批准模型中实施,因为我已经累了。谢谢

解决方法

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

因此,假设您要通过选择来管理状态:


<?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上收听帖子的状态

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()之前就抓住了帖子

您可以在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中


〜Brian Dillingham(@im_brian_d

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...