4

我在error.php中有以下代码,它是App::abort(404, $error)在我的控制器中触发的。我的响应状态代码仍然是 200(ok)。我尝试了各种错误代码,例如 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);
 });
4

4 回答 4

7

对于仍在谷歌搜索此问题的任何人:

我为这个问题苦苦挣扎了好几个小时。对我来说,问题是由我的一个控制器的问题引起的。

<?php检查所有控制器并确保标签前没有空格。<?php标签应该是文件中的第一件事。<?php在任何这样路由的控制器中,标签前的单个空格:

Route::controller('example', 'ExampleController');

将导致所有状态代码为 200。

于 2014-04-28T03:06:35.480 回答
6

我相信,无论如何,您应该收到 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 时考虑使用一些内容协商

于 2013-05-27T16:48:24.150 回答
1

该解决方案对我不起作用,因此如果有人仍在寻找答案,我认为最好将其放在这里而不是创建另一个问题。

一段时间后,我也遇到了这个问题,在我app/Exceptions/Handler.php有:

    if ($e instanceof ModelNotFoundException) {
        if ($request->ajax()) {
            return response()
                ->json(['error' => ['No results']])
                ->header('status', 422);
        }
    }

这在我的本地环境中有效,但是,在同源环境中(为了清楚起见,它复制了生产环境)它没有返回正确的状态代码。

再看一遍后,我开始查看 Laravel 的文档,并将调用更改为以下内容:

    return response()
        ->json(['error' => ['No results.']], 422);

这就是诀窍。希望这能有所帮助。

于 2016-04-08T16:53:54.273 回答
0

就我而言,我在 <?php

于 2020-07-17T07:16:44.430 回答