Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 使“资源详细信息”页面的操作可选_Laravel_Laravel Nova - Fatal编程技术网

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
值,但直接指定它时,代码的意图更为明确