我正在尝试使用Laravel编写RESTful API。
My route is so:
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码和异常处理程序中的消息Error。
我做错了什么吗?我希望没有输出和404代码。
谢谢,迈克尔
只是为了完整,OP提到的行为(可以复制),之前在Laravel的Github上讨论过:https://github.com/laravel/framework/issues/1807。已经决定,它是按照设计的,不会改变。
因此,从错误处理程序中为JSON返回Response::make("Not Found", 404);
或Response::json(null, 404);
是目前唯一的解决方案,正如Michael Bearjaws已经提到的。
更改debug
配置值在app/config/local/app.php
(如果你在本地,你应该)到false
来断言你实际上得到一个404
你也可以:
- 使用phpdoc:
@expectedException Symfony'Component'HttpKernel'Exception'NotFoundHttpException
运行单元测试。推荐 - 推动你的提交到开发,看看它是否真的工作。
您将希望使用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);
});