我的AuthController中有一行,我在其中击中api端点以获取用于登录之前用于验证用户身份的令牌
$authService = new AuthService();
$login = $authService->loginGetToken($email, $password);
当用户存在并成功获得令牌后,我将其登录。但是,如果该用户不存在,则会显示以下信息:
Client error: `POST http://testsite.api` resulted in a `400 BAD REQUEST` response:
{
"message": "User does not exist."
}
我遇到错误的事实很好,但是我想知道如何正确捕获此错误,以便它可以返回登录表单,并显示一条用户不存在的消息,而不是显示整个laravel错误/异常页面。
在这种情况下,400代码可以包含多个消息,所以我可以仅根据消息来正确处理吗?
答案 0 :(得分:4)
您可以使用try catch
块
例如:
try {
$authService = new AuthService();
$login = $authService->loginGetToken($email, $password);
}catch (\Exception $e) {
return Redirect::back()->withErrors(['msg', $e->getResponse()->getBody(true)]);
}
然后在刀片中的视图中可以添加此代码
@if($errors->any())
<h4>{{$errors->first()}}</h4>
@endif
我想$authService->loginGetToken()
正在使用Guzzle
,这就是为什么您会遇到这种错误
如果您使用的是 6.x版及更高版本中的Guzzle
,则应使用以下代码来获取错误:
try{
//your code here
}catch(GuzzleHttp\Exception\ClientException $e){
$error = $e->getResponse()->getBody()->getContents();
$errorMessage = $error['message'];
//redirect user back with error message here
}