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

Laravel中authorize()函数自定义重定向:验证失败带回category_id

解决Laravel表单验证失败后携带category_id重定向的问题

首先要明确:authorize()方法的作用是判断用户是否有权限执行该请求,它只能返回布尔值(true/false),不能返回redirect响应——你之前的写法完全违背了这个方法的设计逻辑,这是核心问题。

正确的实现步骤

  1. 修正authorize()方法
    把错误的重定向代码删掉,根据实际权限需求返回布尔值,若无需权限控制直接返回true即可:

    public function authorize()
    {
        // 示例:无需权限验证时直接返回true
        return true;
        // 若有权限需求,可写类似 return auth()->check(); 的逻辑
    }
    
  2. 利用Laravel自带的输入保留机制
    Laravel表单验证失败后,会自动重定向回上一页,并且默认保留所有提交的输入值。你只需要在视图中通过old()方法获取category_id即可:

    <!-- 示例:在表单的下拉框中回显选中状态 -->
    <select name="category_id">
        @foreach($categories as $category)
            <option value="{{ $category->id }}" {{ old('category_id') == $category->id ? 'selected' : '' }}>
                {{ $category->name }}
            </option>
        @endforeach
    </select>
    
    <!-- 示例:在输入框中回显值 -->
    <input type="text" name="category_id" value="{{ old('category_id') }}">
    
  3. 若需手动控制重定向(可选)
    如果你在控制器中手动处理验证而非使用表单请求类,可通过withInput()方法显式携带输入值:

    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'category_id' => 'required',
        ]);
    
        // 验证通过后的业务逻辑...
    
        // 手动重定向时携带输入值
        return redirect()->back()->withInput();
    }
    

为什么之前的取值方式无效?

你尝试的$this->input('category_id')等写法本身是正确的,但因为错误地在authorize()中返回了redirect,导致Laravel直接判定权限验证失败,后续的验证逻辑和输入值保留机制都没有正常执行,所以无法获取到值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:20:36