我在像这样的Laravel 5.5 API路线上使用findOrFail ......
public function getCategory(Request $request, $id) {
/* Get Category From ID */
try {
$category = Category::with('users')->findOrFail($id);
}
/* catch(Exception $e) catch any exception */
catch(ModelNotFoundException $e) {
/* Return Success Response */
return Response::json(array(
'error' => true,
'status_code' => 400,
'response' => 'category_id_not_found',
));
}
}
如果我输入了一个不存在的ID,那么我会收到404错误而不是JSON响应。
我哪里错了?
原来我不包括
use Illuminate\Database\Eloquent\ModelNotFoundException;
在控制器中,感谢Sohel0415让我朝这个方向看。
答案 0 :(得分:1)
findOrFail
方法返回一个对象或者如果找不到它会引发错误,如Laravel docs中所示,您可能希望使用find
方法并使用{{1}检查模型是否存在}。
答案 1 :(得分:1)
尝试NotFoundHttpException
:
public function getCategory(Request $request, $id) {
/* Get Category From ID */
try {
$category = Category::with('users')->findOrFail($id);
}
/* catch(Exception $e) catch any exception */
catch(NotFoundHttpException $e) {
/* Return Success Response */
return Response::json(array(
'error' => true,
'status_code' => 400,
'response' => 'category_id_not_found',
));
}
}
或者您可以执行以下操作:
public function getCategory(Request $request, $id) {
$category = Category::with('users')->find($id);
if($category!=null){
return Response::json(array(
'status_code' => 200,
'category' => $category,
));
}
return Response::json(array(
'error' => true,
'status_code' => 400,
'response' => 'category_id_not_found',
));
}
}