问题描述
我有资源Post
,并且在创建或更新后,该帖子数据会在批准模型中移动。
批准的状态为:reject
,revision
和approved
。
如何在批准模型中实施,因为我已经累了。谢谢
解决方法
您的资源使用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)