Laravel中如何在UpdatePointRequest请求文件内获取更新请求ID?
解决Laravel请求文件中获取路由ID的问题
你遇到的情况是因为URL中的ID属于路由参数,并不在请求的表单/查询参数集合里,所以用$this->request或request()->all()拿不到。结合你控制器里用了路由模型绑定(Point $point),可以通过以下几种方式在UpdatePointRequest中获取ID:
方法1:通过路由获取绑定的模型实例
直接从路由中取出已绑定的Point模型,再获取其ID:
public function rules(): array { // 获取路由绑定的Point模型 $point = $this->route('point'); $pointId = $point->id; $validationRulesArray = [ 'title' => [ 'required', 'string', 'max:255', Rule::unique($pointTable)->ignore($pointId), ], // 其他规则... ]; // ... }
这里的point是路由参数名,对应你路由定义中的{point}(比如Route::put('/api/points/{point}', [PointController::class, 'update']))。
方法2:直接获取路由参数值
如果你的路由定义是用{id}而非模型绑定(比如Route::put('/api/points/{id}', ...)),可以直接取参数值:
$pointId = $this->route('id');
补充说明
Laravel的FormRequest继承自Request,所以可以直接调用route()方法访问路由参数。路由模型绑定会自动将URL中的参数转化为对应的模型实例,所以用方法1可以直接拿到完整模型,不仅限于ID。
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

