我正在评估通过api发送的字段,需要显示错误。我尝试使用try-and-catch,没有抛出错误。我已经有一个代码验证登录
try {
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
'remember_me' => 'boolean',
]);
} catch (Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
我发现没有错误返回有json,而是重定向到登录页面
如何在API中处理reros并将消息发送为json?没有一个示例显示处理错误的方法。我尝试了所有
以及如何在创建模型时处理错误
try {
$company = Company::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'country_code' => $data['country_code']]);
} catch (Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
$request->validate()
应该自动向浏览器返回一个带有错误的响应。如果失败,它不会引发异常。
如果您的请求是json,它应该检测到并在json错误响应中返回错误,您可以在前端javascript中捕捉到这一点,并询问响应以解释错误消息。例如,使用axios:
this.$axios.post('your api url',{data})
.then(response=>{
// ALL Good
})
.error(error=>{
// Catch returned error and process as required
});
如果如您所说的I found no errors return has json instead it is redirecting to the login page
,这可能意味着Laravel认为该请求是一个标准请求,在这种情况下,它将发出response()->back()->withErrors()
,这可能是将其发送回您的登录的原因。
尝试检查原始请求类型并确保它是json
,它应该有一个Accept: application/json
的头。
或者,您可以定义自己的验证器https://laravel.com/docs/7.x/validation#manually-创建验证器,并根据需要在服务器上处理验证。
如果验证中出现错误,它将自动由laravel处理。您不需要为此捕获异常。它不例外。
我在商店区域中使用的Look-it示例功能
public function createRegion(Request $request)
{
$data = $request->all();
// Create a new validator instance.
$request->validate([
'name' => 'required',
'details' => 'required'
]);
try {
$region = new Region();
$region->name = $data['name'];
$region->details = $data['details'];
$region->save();
$content = array(
'success' => true,
'data' => $region,
'message' => trans('messages.region_added')
);
return response($content)->setStatusCode(200);
} catch (Exception $e) {
$content = array(
'success' => false,
'data' => 'something went wrong.',
'message' => 'There was an error while processing your request: ' .
$e->getMessage()
);
return response($content)->setStatusCode(500);
}
}