Sar*_*mar 4 php laravel laravel-4
我在error.php中有以下代码,这是App::abort(404, $error)在我的控制器中触发的.我的响应状态代码仍为200(确定).我试过各种错误代码,如400,403
// NotFoundException handler
App::error(function(NotFoundException $e)
{
$default_message = 'The requested resource was not found';
return Response::json(array(
'error' => $e->getMessage() ?: $default_message,
), 404);
});
Run Code Online (Sandbox Code Playgroud)
小智 7
对于仍然在Google上搜索此问题的人:
几个小时我一直在努力解决这个问题.对我来说问题是由我的一个控制器的问题引起的.
检查所有控制器,确保<?php标签前面没有空格.< ?phptag应该是文件中的第一件事.<?php任何控制器中标记前面的单个空格,如下所示:
Route::controller('example', 'ExampleController');
Run Code Online (Sandbox Code Playgroud)
将导致所有状态代码为200.
我相信,无论如何,您应该收到404响应,因此可能会发生其他事情,这是因为代码未包含在您的问题中.
话虽如此,为404抛出的Exception类NotFoundHttpException不是NotFoundException.
由于Laravel 4使用Symfony的HttpKernal,所以Exception就在这里.
你可以看到这里那里App::abort()抛出NotFoundHttpException时,404被触发.
因此,您的代码应如下所示:
// NotFoundHttpException handler
App::error(function(\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e)
{
$default_message = 'The requested resource was not found';
return Response::json(array(
'error' => $e->getMessage() ?: $default_message,
), 404);
});
Run Code Online (Sandbox Code Playgroud)
重要提示:这只会触发404状态,因为这是NotFoundHttpException的相应代码.其他状态代码返回其他异常类.要捕获所有 HTTP状态错误代码异常,请键入HttpException的提示,如下所示:
// HttpException handler
App::error(function(\Symfony\Component\HttpKernel\Exception\HttpException $e)
{
return Response::json(array(
'error' => $e->getMessage(),
), $e-> getStatusCode());
});
Run Code Online (Sandbox Code Playgroud)
最后,在决定返回JSON或HTML时,请考虑使用一些内容协商.