例如,我使用:
return User::findOrFail($id);
当$id
的行不存在时,我会遇到异常。
如何在Json响应中返回此异常?它现在返回HTML Laravel页面。
我需要像:
这样的东西{"error", "No query results for model"}
答案 0 :(得分:1)
从他们的文件:
有时,如果找不到模型,您可能希望抛出异常。这在路线或控制器中特别有用。 findOrFail和firstOrFail方法将检索查询的第一个结果。但是,如果未找到任何结果,则将抛出Illuminate \ Database \ Eloquent \ ModelNotFoundException。
因此,您可以捕获该异常,也可以使用简单的Find
方法。如果找不到,它将返回false,因此您可以相应地处理它。
return User::find($id);
<强>更新强>:
选项1 :
try {
return User::findOrFail($id);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
return json_encode(['error' => 'No query results for model']);
}
选项2 :
$user = User::find($id);
if($user) {
return $user;
}
return json_encode(['error' => 'No query results for model']);
答案 1 :(得分:1)
您可以处理各种类型的异常,在这种情况下可以使用ModelNotFoundException处理异常
try{
$user = User::findOrFail($id);
}catch(ModelNotFoundException $e){
return response()->json(['error' => 'User not found'], 400);
}
还有另一种方法可以捕获位于app / Exceptions / Handler.php上的Handler.php中的各种类型的异常,你可以在render
函数中捕获异常并返回任何你想要的内容
例如,您可以在return parent::render($request, $e):
if($e instanceof ModelNotFoundException)
{
return new Response(['message' => 'We haven\'t find any data'], 204);
}
答案 2 :(得分:0)
您应该查看Handler file的render
方法。您可以在此处测试异常类,并根据它以Json格式返回不同的响应