首页 > 解决方案 > Laravel,使用特定消息处理错误

问题描述

我在我的 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 代码可以有多个消息,那么我可以仅根据消息正确处理吗?

标签: phplaravel

解决方案


您可以使用该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为什么你会出现这种错误

如果您使用Guzzle的是6.x及更高版本,则应使用此代码来获取错误:

try{
    //your code here
}catch(GuzzleHttp\Exception\ClientException $e){ 
    $error = $e->getResponse()->getBody()->getContents();
    $errorMessage = $error['message'];
    //redirect user back with error message here
}

推荐阅读