如何处理Laravel中的本机异常?

时间:2016-07-19 19:44:29

标签: laravel laravel-5 laravel-5.2 laravel-response laravel-exceptions

例如,我使用:

return User::findOrFail($id);

$id的行不存在时,我会遇到异常。

如何在Json响应中返回此异常?它现在返回HTML Laravel页面。

我需要像:

这样的东西
{"error", "No query results for model"}

3 个答案:

答案 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 filerender方法。您可以在此处测试异常类,并根据它以Json格式返回不同的响应