use Laravel\Nova\Http\Requests\NovaRequest;
use Illuminate\Http\Request;
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function fields(Request $request)
{
// Model instance or null
$model = NovaRequest::createFrom($request)
->findModelQuery()
->first();
return [
// Your fields here
];
}
public function handleRequest(ActionRequest $request)
{
$this->model = $request->targetModel(); //I am setting a custom variable here.
parent::handleRequest($request);
}
6条答案
按热度按时间xpszyzbs1#
您可以从NovaRequest获取当前模型示例。你可以从传递给方法的\Illuminate\Http\Request创建NovaRequest:
bgibtngc2#
不,有两个原因:
1)
fields
在资源加载时调用,而不是在显示操作对话框时调用2)“当前选定”的概念实际上只存在于客户端(浏览器)端
您只能在
handle
PHP方法中访问选定的行(即。即,提交后,您有$models
)。pzfprimi3#
有时候,当我在详细信息视图上想对该记录执行操作,但也想在字段中包含当前记录数据(可能是帮助文本)时,我会从URL中获取它。
7fyelxc54#
我只在细节页面上运行操作,然后像这样获取单个模型数据:
hvvq6cgz5#
不知道是否有人解决了这个问题,但我得到了同样的问题,并找到了一个article。
根据本文,你可以在action类中创建一个公共方法
setResource
,当在nova资源中注册action时,设置每行的当前资源:$action->setResource($this->resource)
。然后,在fields
方法中,您可以使用$this ->resource
添加您的逻辑资源。这个方法需要注意的是,
$this->resource
可以是null
或null
模型(一个模型类,但没有属性)。因此,在添加任何逻辑之前,必须检查资源属性是否为null
。disho6za6#
您可以定义一个
handleRequest
函数并以这种方式检索模型。比如说然后可以在
handle()
方法中使用$this->model()
。对于独立操作非常有用。