Laravel 8 同控制器下request()->validate()第二次调用失效报GET路由错误
你遇到的报错和验证逻辑本身无关,是表单字段名和验证规则不匹配触发验证失败,后续重定向导致的方法不兼容报错,具体修复方案如下:
根因排查
- 第一处错误:表单字段名和验证规则字段完全不匹配,导致
request()->validate()必然验证失败:- 验证规则要求必填字段
payment_type,但表单对应输入框的name属性为payment-type(中横线和下划线不匹配,Laravel不会自动转换) - 验证规则要求必填字段
amount_due,但表单对应输入框的name属性为amount,名称完全不一致
- 验证规则要求必填字段
- 第二处错误:验证失败后Laravel默认会返回302重定向到表单来源页,请求方式为GET。如果你的表单展示页路由仅支持POST方法,就会触发「GET方法不支持,建议使用POST」的报错。
修复步骤
- 修改Blade表单的字段
name属性,和验证规则保持一致:<!-- 修改前 --> <input type="text" class="form-control" name="payment-type" placeholder="Payment Type..."> <input type="number" min="2" max="" step="any" class="form-control" name="amount" placeholder="Amount Due..."> <!-- 修改后 --> <input type="text" class="form-control" name="payment_type" placeholder="Payment Type..."> <input type="number" min="2" max="" step="any" class="form-control" name="amount_due" placeholder="Amount Due..."> - 检查展示表单的页面路由,将其改为GET类型(表单展示页面本身就应该通过GET请求访问)。
- 可选优化:确认
PaymentInfo模型的$fillable属性已包含payment_type、terms、amount_due、from、to这几个字段,避免触发批量赋值报错。
内容的提问来源于stack exchange,提问作者Errol Boneo
相关产品推荐
相关产品推荐

