针对api路由的Costum findOrFail

时间:2017-11-03 10:27:28

标签: php laravel laravel-5.5

我认为这应该是默认实现的,因为我在routes / api.php中工作。

如果我们在id方法上找不到给定findOrFail()参数的任何行,我想给出一个404错误的json响应。

类似的东西:

return response()->json(['status' => 'ERROR', 'error' => '404 not found'], 404);

而不是默认的Sorry, the page you are looking for could not be found.刀片页。

我不想做:

$item = Model::find($id);
if(is_null($item))
   return response()->json(['status' => 'ERROR', 'error' => '404 not found'], 404);

当我得到一个id时,无处不在,我不想在中间件中实现这一点,因为它会导致一些“混乱”。在api.php文件上。

3 个答案:

答案 0 :(得分:2)

您始终可以在App \ Exceptions \ Handler.php

中捕获异常

使用以下内容将异常导入到类中:

use \Illuminate\Database\Eloquent\ModelNotFoundException;

并在render方法中添加

if ($e instanceof ModelNotFoundException) {

            return response()->json([
                'message' => 'Record not found',
            ], 404);

        }

答案 1 :(得分:1)

只需添加一下,我最终检查了这三个异常:

  1. Illuminate \ Database \ Eloquent \ ModelNotFoundException;
  2. Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException;
  3. Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException;

然后如果需要返回JSON:

if ($request->expectsJson()) {
    return response()->json(['error' => $msg], $code);    
}

答案 2 :(得分:0)

或者使用它,对我来说更干净:

try {
    $resource = Model::findorfail($id);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
    return response([
        'status' => 'ERROR',
        'error' => '404 not found'
    ], 404);
}