判断主要针对 API 请求和普通页面请求,即 API 的表单验证失败直接响应 JSON,而页面的表单验证失败正常重定向。

看网上基本上是继承 FormRequest 类来实现,其实直接修改异常处理的 Handler 类即可,非常简单。

  1. 打开 app/Exceptions/Handler.php 文件

  2. 重写 render($request, Throwable $e) 方法

     /**
     * @param Request   $request
     * @param Throwable $e
     *
     * @return Response
     * @throws Throwable
     */
    public function render($request, Throwable $e): \Symfony\Component\HttpFoundation\Response {
        if ($e instanceof \Illuminate\Validation\ValidationException) {
            if ($request->route()->getPrefix() === 'api') {
                // 响应 JSON
                return response()->json([
    	            'message' => current($e->errors())[0] ?? '未知错误',
    	            'success' => false
    	        ]);
            }
        }
    
        return parent::render($request, $e);
    }
    
  3. 注意 app/Providers/RouteServiceProvider.phpboot() 方法内 API 部分的 prefix 是否为 api。如果不是则上方判断 api 字符串的地方需要修改一下。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部