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

Laravel验证失败后如何以POST方法重定向至POST路由?

解决方案

核心思路

绕过Laravel默认的GET重定向逻辑,在验证失败时直接返回原搜索页面的视图,同时传入验证错误信息和用户提交的旧数据,让浏览器保持POST请求的上下文,避免触发GET请求的路由不支持错误。

具体实现

修改CustomFormRequest.php中的failedValidation方法,替换默认的重定向处理逻辑:

use Illuminate\Http\Response;
use Illuminate\Contracts\Validation\Validator;

protected function failedValidation(Validator $validator)
{
    // 闪存用户提交的旧数据到session,方便视图用old()回显
    $this->flash();
    
    // 直接返回搜索页面视图,传入错误信息
    return response()->view('你的搜索页面视图名称', [
        'errors' => $validator->errors()
    ], Response::HTTP_UNPROCESSABLE_ENTITY);
}

关键细节

  • 把你的搜索页面视图名称替换为实际的视图文件名(比如search或search.index,根据你的视图结构调整)。
  • $this->flash()会将当前请求的输入数据暂存到session,视图中可通过old('字段名')回显用户之前输入的内容。
  • 返回422 Unprocessable Entity状态码,既符合规范,也能让页面明确识别这是验证失败的响应。

视图层适配

确保搜索视图正确展示错误信息和旧数据:

<!-- 显示验证错误 -->
@if($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<!-- 表单回显旧数据 -->
<form method="POST" action="{{ route('search') }}">
    @csrf
    <input type="text" name="keyword" value="{{ old('keyword') }}">
    <!-- 其他表单字段 -->
    <button type="submit">搜索</button>
</form>

补充说明

  • 关于请求方法的查看:在failedValidation中直接调用$this->method()即可获取当前请求方法,比如:
    \Log::debug($this->method()); // 输出POST
    
    之前用$this->request->method()可能因属性访问方式问题无法获取,直接使用FormRequest自身的method()方法更可靠。

内容的提问来源于stack exchange,提问作者Mr. Kenneth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:23