我有此订单资源,并添加了两个操作,首先您必须使用OrderInTransit操作将订单设置为运输中,然后使用OrderDelivered操作将其交付。
在我的App\Nova\Actions\OrderInTransit
中,我有这个
public function handle(ActionFields $fields, Collection $models)
{
return DB::transaction(function() use ($fields, $models) {
$delivery_cost = $fields->delivery_cost * 100;
foreach ($models as $model) {
// set as in transit
// set reference number and courrier
$model->update([
'delivered' => 1,
'remarks' => 'Courrier: ' . $fields->courrier . ', Reference: ' . $fields->reference,
'delivery_cost' => $delivery_cost,
'processed_at' => now()
]);
// create notification
}
return Action::message('Order is in transit!');
});
}
一旦订单正在运输中,如果客户已使用App\Nova\Actions\OrderDelivered
收到了订单,则我必须对其进行更新。 OrderDelivered
仍然一无所有,它是使用空的handle()和fields()刚创建的。
这是App\Nova\Order
资源操作,
public function actions(Request $request)
{
return [
(new OrderInTransit)
->canSee(function($request) {
return (optional($request->findModelQuery()->first())->delivered == 0) ? true : false;
})
->canRun(function($request, $user) {
return true;
}),
(new OrderDelivered)
->canSee(function($request) {
return (optional($request->findModelQuery()->first())->delivered == 1) ? true : false;
})
->canRun(function($request, $user) {
return true;
}),
];
}
OrderInTransit运作良好,并且可以更新模型。但是,当我尝试使用OrderDelivered Action时,它会将我重定向到nova 403
。
检查我的浏览器网络活动,
消息:“”,异常:“ Symfony \ Component \ HttpKernel \ Exception \ HttpException”
来自
/ nova-api / orders / action?action = order-delivered&pivotAction = false&search =&trashed =&viaResource =&viaResourceId =&viaRelationship =
我还设置了政策
protected $policies = [
'App\Payment' => 'App\Policies\PaymentPolicy',
'App\Order' => 'App\Policies\OrderPolicy',
];
这很奇怪,因为第一个动作运行了,第二个动作变成了403 Forbidden