在做了一些调试之后,我发现资源
actions()
方法接收
Laravel\Nova\Http\Requests\NovaRequest
具有的实例
findModelOrFail()
方法和对于单个资源(例如,在查看资源的详细信息页时),请求也会
resourceId
参数。
所以基于
资源库
在请求中,我现在可以确定我是否处于单一资源操作的上下文中。然后我用这个ID获取资源的模型并检查它
is_banned
属性来解析资源的可用操作。
我的行动解决逻辑最终是:
public function actions(Request $request)
{
if ($request->resourceId !== null) {
$product = $request->findModelOrFail($request->resourceId);
if ($product->is_banned) {
return [];
}
}
return [new Actions\BanProduct];
}
注意
查找模型或失败()
方法不能在没有
$resourceId
参数,将自动获取
资源库
在这种情况下,来自请求的值,但是在直接指定代码时,代码的意图更清晰。