How can I return json data when Laravel 5 catch exception?
当laravel捕获异常时,如何返回json数据?
当数据库中不存在Json数据时,我想返回该数据。
当laravel从数据库中找到记录时,它会返回正确的json数据。
如果laravel无法搜索任何记录,则不会提供json数据!
laravel重新修改了显示"糟糕的东西,好像出现了问题"的页面。并提供soem额外的信息" ModelNotFoundException"。
以下代码是我尝试的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public function show($id) { try { $statusCode = 200; $response = [ 'todo' => [] ]; $todo = Todo::findOrFail($id); $response['todo']= [ 'id' => $todo->id, 'title' => $todo->title, 'body' => $todo->body, ]; } catch(Exception $e) { // I think laravel doesn't go through following exception $statusCode = 404; $response = [ "error" =>"You do not have that record" ]; } finally { return response($response, $statusCode); } } |
我解决了问题。首先,我将findOrFail方法更改为find方法。其次,我意识到Exception,并且Illuminate \\\\ Database \\\\ Eloquent \\\\ ModelNotFoundException $ e无法捕获任何内容。因此,我更改为if条件。然后就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public function show($id) { $statusCode = 200; $response = [ 'todo' => [] ]; $todo = Todo::find($id); if ( is_null($todo) ) { $statusCode = 404; $response = [ "error" =>"The record doesn't exist" ]; } else { $response['todo']= [ 'id' => $todo->id, 'title' => $todo->title, 'body' => $todo->body, ]; } return response($response, $statusCode); } |