我正在与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]."
那是我不想要的东西。
谢谢!
答案 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);