【问题标题】:Continue to Controller even if request validation fails即使请求验证失败,也继续使用 Controller
【发布时间】:2020-08-23 09:16:01
【问题描述】:

我有这个控制器,它有自己的请求类和规则来验证。即使验证失败,我也需要它进入控制器。 即使它是错误的,我也需要创建对象。但也将错误发回给用户。

 /**
 * Ebdn_gnl - Store
 * Store a newly created resource in storage.
 *
 * @param  \Ebdn\Http\Requests\EbdnGnlRequest $request
 * @return \Illuminate\Http\Response
 */
//public function store(Request $request)
public function store(EbdnGnlRequest $request)
{
    dump($request->all());
    return response("Api under construction", 200);
}

【问题讨论】:

  • 您可以尝试在您的请求中发送Accept: application/json 标头吗?
  • 确实如此。如果验证失败,它会抛出带有错误消息的 422 错误。但就我而言,我想要的是继续使用我的控制器,处理请求,然后返回错误。
  • 您可以将$redirect 变量设置为您的路由,以便在验证失败时将其转发给您的控制器?
  • 重定向对我没有任何好处,我会在同样的事情上绊倒。但我找到了一个令我满意的解决方案。如果你想检查它,我把它放在答案中。谢谢你的时间;)

标签: php laravel validation request


【解决方案1】:

找到了!!

在我的请求类中,我需要覆盖 failedValidation 函数以使其将错误合并到请求中(这样我就可以在我的控制器中访问它们)而不是抛出错误。

类 EbdnGnlRequest 扩展 FormRequest {

protected function failedValidation(Validator $validator)
{
    $this->merge(['errors' => $validator->errors()]);
}

【讨论】:

    【解决方案2】:

    为此,您可以在请求中为每个规则添加一条消息:

    public function message(){}
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      相关资源
      最近更新 更多