Laravel 4 using App::error with App::abort(404)


Laravel 4 using App::error with App::abort(404)

我正在尝试使用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); 
});