Laravel 使“资源详细信息”页面的操作可选
假设我对Laravel 使“资源详细信息”页面的操作可选,laravel,laravel-nova,Laravel,Laravel Nova,假设我对产品资源和产品模型有被禁止字段有操作“禁止”。无需在已被禁止的产品的详细信息页面上显示“禁止”操作(被禁止=1) Laravel Nova文档提供了基于管理员是否有权执行隐藏操作的示例: 公共功能操作(请求$Request) { 返回[ (新操作\EmailAccountProfile)->canSee(函数($request){ return$request->user()->can( “emailAnyAccountProfile”,用户::类 ); }), ]; } 但它没有涵盖
产品
资源和产品
模型有被禁止
字段有操作“禁止”。无需在已被禁止的产品的详细信息页面上显示“禁止”操作(被禁止=1
)
Laravel Nova文档提供了基于管理员是否有权执行隐藏操作的示例:
公共功能操作(请求$Request)
{
返回[
(新操作\EmailAccountProfile)->canSee(函数($request){
return$request->user()->can(
“emailAnyAccountProfile”,用户::类
);
}),
];
}
但它没有涵盖在单个资源的上下文中调用此方法时(在其详细信息页面上),如何在我为canSee
解析提供的闭包中获取当前资源的模型实例
actions()
方法是注册可用操作的地方,在我的例子中,它属于Product
Nova资源类,但它也不能访问雄辩模型的上下文
如何实现这一点?在进行一些调试之后,我发现resource的actions()
方法接收Laravel\Nova\Http\Requests\NovaRequest
实例,该实例具有findModelLorFail()
方法,并且针对单个资源(例如,在查看资源的详细信息页面时)请求还获取resourceId
参数
因此,基于请求中存在的resourceId
,我现在可以确定我是否处于单个资源操作的上下文中。然后,我将用这个id获取资源的模型,并检查它的is\u banked
属性,以解析资源的可用操作
我的行动解决逻辑最终是:
公共功能操作(请求$Request)
{
如果($request->resourceId!==null){
$product=$request->FindModelLorFail($request->resourceId);
如果($product->被禁止){
返回[];
}
}
返回[new Actions\BanProduct];
}
请注意,findModelOrFail()
方法可以在不使用$resourceId
参数的情况下调用,并将在这种情况下自动从请求中获取resourceId
值,但直接指定它时,代码的意图更为明确