Laravel,使用特定消息处理错误

时间:2019-02-21 15:20:00

标签: php 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代码可以包含多个消息,所以我可以仅根据消息来正确处理吗?

1 个答案:

答案 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
}