处理资源控制器方法引发的错误

时间:2018-08-30 17:12:32

标签: laravel laravel-5.6

我正在与Laravel 5.6一起工作,因此我决定创建一个资源控制器来处理我的一个模型。知道,我正在尝试破坏数据库中的记录,如下所示:

public function destroy(Role $role)
  {
      $role->delete();

      return response([
          'alert' => [
              'type' => 'success',
              'title' => 'Role destroyed!'
          ]
      ], 200);
  }

只要存在$role,它就可以正常工作。我的问题是,在$role不存在的情况下,我想自己处理响应:

return response([
     'alert' => [
         'type' => 'ups!',
         'title' => 'There is no role with the provided id!'
     ]
], 400);

但是,相反,我收到了这样的错误:

"No query results for model [App\\Models\\Role]."

那是我不想要的东西。

谢谢!

1 个答案:

答案 0 :(得分:2)

"No query results for model [App\\Models\\Role]."是Laravel中ModelNotFound异常的标准响应消息。

更改此类异常响应的最佳方法是使用异常处理程序的render函数对所需的任何消息进行响应。

例如,您可以

if ($e instanceof ModelNotFoundException) {
        $response['type'] = "ups!;
        $response['message'] = "Could not find what you're looking for";
        $response['status'] = Response::HTTP_NOT_FOUND
    }


    return response()->json(['alert' => $response], $response['status']);

另一种方法是确保不会引发ModelNotFound异常(因此在查询模型时使用->find()而不是->findOrFail()) 然后像这样使用中止助手,如果没有返回结果:

abort(400, 'Role not found');

return response(['alert' => [
    'type' => 'ups!', 
    'title' => 'There is no role with the provided id!']
],400);