我正在尝试使用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代码。
谢谢,
迈克尔
发布于 2014-07-31 15:12:29
为了完整起见,OP提到的行为(以及可以复制的行为)之前在Laravel的Github:https://github.com/laravel/framework/issues/1807上进行了讨论。据决定,它是按照设计的,不会被改变。
因此,从错误处理程序中返回JSON的Response::make("Not Found", 404);或Response::json(null, 404);是目前唯一的解决方案,正如Michael Bearjaws已经提到的那样。
发布于 2014-07-31 14:10:55
您将希望使用Response::make("Not Found", 404);实际返回一个404头并显示"Not Found"消息。
您还可以使用视图呈现您自己的自定义404显示,如下所示
return Response::view('missing', array(), 404);
您还可以向应用程序中添加一个缺少的处理程序,以便它可以与您的代码一起工作。
App::missing(function($exception) {
return Response::view('missing', array(), 404);
}); 发布于 2014-07-31 14:16:00
将app/config/local/app.php中的app/config/local/app.php配置值(如果您是本地的,应该是本地的)更改为false,以断言您实际上得到了一个404。
你也可以:
@expectedException Symfony\Component\HttpKernel\Exception\NotFoundHttpException运行一个单元测试。推荐的https://stackoverflow.com/questions/25060801
复制相似问题