api laravel 统一返回方法_laravel 中api使用RequestForm验证返回响应Http

本文介绍了在Laravel中如何使用RequestForm进行API数据验证,并在验证失败时自定义返回的HTTP响应。通过覆盖`failedValidation`方法和`response`方法,可以实现统一的错误响应处理,确保在API接口中返回一致的错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

api使用Request这种方式验证数据,如果失败就会返回422错误

laravel 5.5的解决方案

请看手册这里和简书一篇文章 如果你要自定义请看这里

AuthRequest验证代码

use ApiResponse;

protected $routeName = null;

public function __construct ()

{

// 这里我使用了获取到了路由别名

$this->routeName = request()->route()->getName();

}

public function authorize()

{

//开启校验

return true;

}

public function rules()

{

//我这里使用的是别名,并没有一个方法写一个Request

switch ($this->routeName){

case 'api.auth.weChat':

return [

'pid'=>'required',

'access_token'=>'required',

];

break;

}

}

public function messages ()

{

//同上

switch ($this->routeName){

case 'api.auth.weChat':

return [

'pid.required'=>'required',

'access_token.required'=>'required',

];

break;

}

}

重写FormRequest的failedValidation方法

protected function failedValidation(Validator $validator)

{

//获得错误

$errors = $validator->errors()->toArray();

//如果有错误就获取到所有错误

if($errors) $errors = $this->getAllErrors($errors);

//抛出一个HttpResponseException异常,apiParametersMissing是我封装的response()->json()方法而已

throw new HttpResponseException($this->apiParametersMissing('参数错误',$errors));

}

注意这里的Validate是use Illuminate\Contracts\Validation\Validator; 否则会报类找不到

getAllErrors方法

public function getAllErrors (array $errors)

{

$response = [];

foreach ($errors as $key => $error) {

$response[ $key ] = $error[0];

}

return $response;

}

laravel 5.1的解决方案

重写FormRequest的response方法

public function response(array $errors)

{

if ($this->ajax() || $this->wantsJson()) {

// 捕获错误消息.并且返回

return $this->getJsonErrMesByRes($errors);

}

return $this->redirector->to($this->getRedirectUrl())

->withInput($this->except($this->dontFlash))

->withErrors($errors, $this->errorBag);

}

检查返回json

最后我们就如愿的拿到了非Http错误的返回数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值