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 代码可以有多个消息,那么我可以仅根据消息正确处理吗?
解决方案
您可以使用该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
}
推荐阅读
- vuex - Vuex 动作中的多个参数不起作用
- c# - C#从对象列表中的字段中获取最大数字
- apache-kafka - Kafka - 是否可以更改主题的分区数,同时保持更改对生产者和消费者透明?
- javascript - 如何禁用 apexcharts 上的下载选项?
- c# - 在编译时已知属性时快速检索属性信息
- json - D3 图表不显示来自变量的 JSON 信息
- java - java中从camel导入的“from”在哪里?
- php - Laravel 在验证中带有 (And) 运算符
- javascript - 我想将项目附加到数组中的列表
- c# - 使用 XElement 处理无效的 XML 字符