使用http响应代码/消息指示重定向

时间:2019-03-14 17:54:16

标签: php laravel

我在下面调用一个API端点,并捕获直接从其返回的任何错误,将其解码并显示为错误:

try {
        $authService = new AuthService();
        $login = $authService->loginGetToken($email, $password);
    }catch (\Exception $e) {
        $response = json_decode($e->getResponse()->getBody()->getContents());
        $message = $response->message;

        return Redirect::back()->withErrors($message);
    }

我的问题:如果密码已过期,我会返回400错误,并显示消息“密码已过期”

我的catch块中是否有一种方法可以检查代码和消息是否正确,如果是,则将其重定向到视图auth.reset以重置密码?

1 个答案:

答案 0 :(得分:2)

您可以致电$e->getMessage() ... http://php.net/manual/en/exception.getmessage.php ...还有一个$e->getCode()来获取代码,因为您同时询问了这两个问题。

类似这样:

if($e->getMessage() == 'Password is Expired') {
    return redirect('auth/reset'); // or whatever your route is
}

或使用您的代码:

try {
    ...
} catch (\Exception $) {
    $response = json_decode($e->getResponse()->getBody()->getContents());
    $message = $response->message;
    if($message == 'Password is Expired') {
        return redirect('auth/reset'); // or whatever your route is
    }
    return Redirect::back()->withErrors($message);
}

您还可能会发现正在获取一种可以捕获的特定类型的异常:

catch (PasswordExpiredException $e) {
    ... // password is expired
} catch (Exception $e) {
    ... // something else happened
}