我相信,无论如何,您应该收到 404 响应,因此可能会发生其他事情,这是您的问题中未包含代码的结果。
话虽如此,为 404 引发的 Exception 类是NotFoundHttpException
而不是NotFoundException
.
由于 Laravel 4 使用 Symfony 的 HttpKernal,所以 Exception is here。
您可以在此处查看触发 404 时抛出的位置App::abort()
。NotFoundHttpException
因此,您的代码应如下所示:
// 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);
});
重要提示:这只会触发 404 状态,因为这是 NotFoundHttpException 的相应代码。其他状态代码返回其他异常类。要捕获所有HTTP 状态错误代码异常,请键入HttpException的提示,如下所示:
// HttpException handler
App::error(function(\Symfony\Component\HttpKernel\Exception\HttpException $e)
{
return Response::json(array(
'error' => $e->getMessage(),
), $e-> getStatusCode());
});
最后,在决定返回 JSON 或 HTML 时考虑使用一些内容协商。