首頁 >後端開發 >php教程 >laravel API 介面使用 Validator 無法傳回特定的未通過驗證的錯誤訊息

laravel API 介面使用 Validator 無法傳回特定的未通過驗證的錯誤訊息

WBOY
WBOY原創
2016-10-19 10:40:492038瀏覽

API 介面中使用 Validator 對表單進行驗證;
當有為通過驗證的項時;
都是回傳

<code>{
  "message": "The given data failed to pass validation.",
  "status_code": 500
}</code>

無法返回具體的未通過驗證的資訊;
那前端或行動端接到返回的錯誤訊息的時候;
並不能告訴用戶到底是哪一項不符合要求;
我想要的是這樣的;

<code>{
  "message": "邮箱已经注册",
  "status_code": 500
}

{
  "message": "必须是6-16位的密码",
  "status_code": 500
}</code>

請教親們;需要怎麼做?

親們用 laravel 寫介面的時候;
提交的表單欄位是怎麼驗證的?怎麼回傳驗證結果的?

回覆內容:

API 介面中使用 Validator 對表單進行驗證;
當有為通過驗證的項時;
都是回傳

<code>{
  "message": "The given data failed to pass validation.",
  "status_code": 500
}</code>

無法返回具體的未通過驗證的資訊;
那前端或行動端接到返回的錯誤訊息的時候;
並不能告訴用戶到底是哪一項不符合要求;
我想要的是這樣的;

<code>{
  "message": "邮箱已经注册",
  "status_code": 500
}

{
  "message": "必须是6-16位的密码",
  "status_code": 500
}</code>

請教親們;需要怎麼做?

親們用 laravel 寫介面的時候;
提交的表單欄位是怎麼驗證的?怎麼回傳驗證結果的?

Laravel 是可以自訂錯誤格式的,需要在控制器基底類別中重寫 formatValidationErrors 方法

<code>use Illuminate\Contracts\Validation\Validator;

protected function formatValidationErrors(Validator $validator)
{
     $message = $validator->errors()->first();
     return ['message'=>$message, 'status_code' => 500];
}</code>

你還可以按照你自己的需求進行擴展,上面只是一個簡單的例子,返回的是第一個錯誤訊息.

如果你使用 dingo/api 驗證處理

當然你也可以在

<code>if ($validator->fails()) {
     //自行封装个处理验证失败返回值 类似下面
     $this->respondWithValidatorError($validator->errors());    
}
</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn