Laravel 5.5 - 找不到404的API ID而不是JSON

时间:2018-02-11 16:48:15

标签: laravel

我在像这样的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让我朝这个方向看。

2 个答案:

答案 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',
    ));

 }
}