Laravel自定義錯誤消息
在Laravel驗證請求時出現(xiàn)錯誤,默認(rèn)會返回如下的錯誤:
可以看到JSO結(jié)構(gòu)中的message為The given data was invalid.而并非是我們具體自定義的錯誤,這在用戶端顯得非常不友好谈宛。
在谷歌找了半天都是教你如何通過語言包的形式修改為本地化的語言惫恼,實質(zhì)上和我們的需求有些出入泣矛,并不能獲取的具體的錯誤內(nèi)容真慢。
最終灾挨,在laravel的issue中找到一則帖子:https://github.com/laravel/framework/issues/21059
其實我很同意這個帖子主題少孝,和我遇到的情況一致继低,但被關(guān)閉了。
文中有一些其他人給出的解決思路稍走,如下:
修改文件:app/Exceptions/Handler.php
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Exception
*/
public function render($request, Exception $exception)
{
if ($exception instanceof ValidationException && $request->expectsJson())
return response()->json(['message' => $exception->validator->errors()->first(), 'errors' => $exception->validator->getMessageBag()], 422);
return parent::render($request, $exception);
}
通過修改render方法得以實現(xiàn)對請求異常時返回的json內(nèi)容袁翁。
如果想更改為其他的json結(jié)構(gòu),也可以在此進(jìn)行修改婿脸。
其實如果只是想更改JSON結(jié)構(gòu)可以通過重寫invalidJson實現(xiàn)粱胜,依然在這個文件里:
/**
* Convert a validation exception into a JSON response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Validation\ValidationException $exception
* @return \Illuminate\Http\JsonResponse
*/
protected function invalidJson($request, ValidationException $exception)
{
return response(eeData($exception->getMessage(), $exception->status));
}
其中的eeData為我自己自定義的JSON結(jié)構(gòu)函數(shù)。