6

我只是无法理解,也不知道在哪里看,因为以下代码的响应状态代码始终为 200,即使我在主 Response 类中将其设置为 400。

class Api_Controller extends Base_Controller
{

    public function __construct()
    {
          parent::__construct();

          //header("HTTP/1.0 404 Not Found"); ##> This works
          //die();

          $test = array('1' => '2');
          die(Response::json($test, 400));
    }

我错过了什么?我没有使用任何扩展类,只是默认的......

更新

这是Response::json...上面的输出:http: //pastebin.com/RGcinSdg

如您所见,输出具有已设置的值......但仍然由于某种原因,返回 200

更新2

的输出var_dump(http_response_code());总是200

Update3 - 临时修复

我已经激活了扩展版本,Response::json并在其中添加了以下行

http_response_code($status);

但我仍然很想知道它为什么不这样做,它应该如何

4

5 回答 5

11

你不能从控制器构造函数返回响应——它只是不符合 Laravel 中请求生命周期的流程。

有两种方法可以做到这一点。您可以:

a) 设置一个响应过滤器来处理您尝试实现的任何功能,或者 b) 强制控制器 ACTION 返回响应。这将像这样完成:

class Api_Controller extends Base_Controller
{
    public $restful = true;

    public function get_index()
    {
        return Response::json($test, 400);
    }
}

它确实有效 - 你只是做错了:)

于 2013-02-05T22:06:11.027 回答
3

如果您忘记了return语句,也会出现同样的问题:

Response::json(array(
   'error' => true,
   'msg' => 'Bad request'
), 403);

代替:

return Response::json(array(
   'error' => true,
   'msg' => 'Bad request'
), 403);
于 2014-06-05T15:40:46.217 回答
2

试试response()->json()语法。

因此,例如,要从自定义 FormResquest 中标记验证错误,您可以这样做:

/**
 * Get validation response for the request.
 *
 * @param  array $messages
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function response(array $messages)
{
    return response()->json($messages, 422);
}
于 2017-04-06T14:16:24.283 回答
0

控制器方法总是必须返回响应。但我认为您不能从构造函数返回响应。您将需要使用过滤器。

于 2013-02-05T10:34:22.820 回答
0

为了让 Google 网站管理员工具满意,我在标题中检测并使用以下内容:

META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"
于 2014-11-27T01:17:13.040 回答