Laravel 4使用App :: error with App :: abort(404)

时间:2014-07-31 13:58:08

标签: php rest laravel laravel-4

我正在尝试使用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代码。

谢谢,

迈克尔

3 个答案:

答案 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}}。

你也可以:

  • 使用phpdoc运行单元测试:{{1}}。的 推荐
  • 将您的提交推送到开发,看它是否真的有效。