然而,这是前端的页面(PC页面),我们现在要说的 API接口
解决办法,同样是关注 App\Exceptions\Handler.php 这个文件是laravel的错误处理的地方
同样是要修改类中的 render() 方法
思路是 当validator验证出错的时候 laravel 抛出的是一个 validateException 类,并且laravel接口路由的前缀是 “api/”,那么我们可能从 request中匹配 路由是 “api/*” 的路由,如果是,并且 $exception 是 validateException的一个实例,则返回出自己定义的json数据
原始render()方法如下
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
修改后的方法如下
public function render($request, Exception $exception)
{
//如果路由中含有“api/”,则说明是一个 api 的接口请求
if($request->is("api/*")){
//如果错误是 ValidationException的一个实例,说明是一个验证的错误
if($exception instanceof ValidationException){
$result = [
"statusCode"=>ERR_PARAMETER,
//这里使用 $exception->errors() 得到验证的所有错误信息,是一个关联二维数组,所以 使用了array_values()取得了数组中的值,而值也是一个数组,所以用的两个 [0][0]
"errorMsg"=>array_values($exception->errors())[0][0],
"returnResult"=>null
];
return response()->json($result);
}
}
return parent::render($request, $exception);
}