Laravel如何在自定义Request中获取URL路由参数
解决方法
核心原因
你获取不到路由参数,90%的情况是路由定义的参数名和你调用route()时传入的参数名不匹配。
排查&解决步骤
- 先核对你的路由定义
比如你访问的路径是example.com/users/20,对应的路由定义如果是:
// 这里路由参数名是 id Route::put('/users/{id}', [UserController::class, 'update']);
那你可以直接用$this->route('id')获取参数值;如果路由定义的是/users/{user},那参数名是user,要改成$this->route('user')才能拿到。
如果是用了路由模型绑定,$this->route('user')会直接返回对应的User模型实例,要拿id可以写$this->route('user')->id。
- 你之前尝试的写法无效的原因:
$this->id:FormRequest默认不会自动把路由参数挂载为类属性,所以返回null$this->input('id'):这个方法只能获取请求体、URL查询字符串里的参数,拿不到路由路径里的参数- 兜底获取写法:如果还是拿不到,可以用全局请求助手获取所有路由参数确认:
// 打印所有路由参数,确认你要的参数键名 dd(request()->route()->parameters());
正确代码示例
public function rules() { // 替换成你路由里实际定义的参数名即可 $userId = $this->route('id'); return [ 'name' => 'required|min:2', 'email' => 'required|email|unique:users,email,' . $userId, 'password' => 'nullable|min:4' ]; }
内容的提问来源于stack exchange,提问作者boguchar
相关产品推荐
相关产品推荐

