我正在尝试使用Laravel编写RESTful API。
我的路线是这样的:
Route::resource('user', 'UserController');
方法是这样的:
public function show($id)
{
return User::findOrFail($id);
}
但是如果模型实例不存在,我会得到500错误,而我相信我需要404错误。
所以在start / global.php中我有这个:
App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception)
{
App::abort(404);
});
这给了我一个200代码和异常处理程序中的错误消息。
我做错了吗?我希望没有输出和404代码。
谢谢,
迈克尔
答案 0 :(得分:7)
为了完整起见,OP提到(并且可以复制)的行为之前在Laravel的Github上讨论过:https://github.com/laravel/framework/issues/1807。决定它是按设计的,不会改变的。
因此,正如Michael Bearjaws已经提到的那样,在错误处理程序中为JSON返回Response::make("Not Found", 404);
或Response::json(null, 404);
是唯一的解决方案。
答案 1 :(得分:3)
您需要使用Response::make("Not Found", 404);
实际返回404标头并显示"Not Found"
消息。
您还可以使用视图使用以下
呈现自己的自定义404显示 return Response::view('missing', array(), 404);
您还可以向应用程序添加一个Missing处理程序,以便它可以与您的代码一起使用
App::missing(function($exception) {
return Response::view('missing', array(), 404);
});
答案 2 :(得分:3)
将debug
app/config/local/app.php
中的false
配置值更改为@expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException
以确认您实际获得的是{{1}}。
你也可以: