You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel使用FormRequest时获取路由参数及自定义校验错误处理方法

问题1:获取路由参数name的方法

有两种常用方式:

  • 方法1:通过注入的ShowRequest实例直接调用route()方法获取
    $name = $request->route('name');
    
  • 方法2:直接在控制器方法参数中保留原有的$name参数即可,Laravel会自动按顺序注入路由参数
    public function show(ShowRequest $request, $name)
    {
        // 直接使用$name即可
    }
    

补充:如果你需要在ShowRequest的校验规则里对name参数做校验,直接在rules方法中添加对应规则即可,Laravel的FormRequest会自动将路由参数纳入校验数据源。

问题2:自定义校验失败逻辑的实现

自定义逻辑建议放在ShowRequest请求类中,和校验规则统一管理,符合职责分离的规范,不需要在控制器中重复处理。
具体实现步骤:

  1. 在ShowRequest类中引入Illuminate\Contracts\Validation\Validator、Illuminate\Http\Exceptions\HttpResponseException(按需引入)
  2. 重写父类FormRequest的failedValidation方法,在方法中写入你的自定义逻辑即可。

代码示例:

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class ShowRequest extends FormRequest {
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            // 你的校验规则
        ];
    }

    protected function failedValidation(Validator $validator)
    {
        // 此处编写自定义校验失败逻辑
        // 示例:API场景返回统一格式的JSON响应
        throw new HttpResponseException(response()->json([
            'code' => 400,
            'msg' => '参数校验失败',
            'errors' => $validator->errors()
        ], 400));

        // 示例:Web场景自定义跳转逻辑
        // throw new HttpResponseException(redirect()->back()->withErrors($validator)->withInput());
    }
}

内容的提问来源于stack exchange,提问作者user842225

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:09:01