Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉韦尔元';我不遵守身份代码_Php_Json_Laravel_Http Status Codes - Fatal编程技术网

Php 拉韦尔元';我不遵守身份代码

Php 拉韦尔元';我不遵守身份代码,php,json,laravel,http-status-codes,Php,Json,Laravel,Http Status Codes,我只是不明白,也不知道还有什么地方可以看,因为下面代码的响应状态代码总是200,即使我在主响应类中将其设置为400 class Api_Controller extends Base_Controller { public function __construct() { parent::__construct(); //header("HTTP/1.0 404 Not Found"); ##> This works

我只是不明白,也不知道还有什么地方可以看,因为下面代码的响应状态代码总是200,即使我在主响应类中将其设置为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…
的输出:

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

更新2
var_dump(http_response_code())的输出总是
200

更新3-临时修复 我已经激活了一个扩展版本的
Response::json
,并在其中添加了以下行

http_response_code($status);

但是我仍然很想知道为什么它不这样做,它应该以什么方式来

控制器方法总是必须返回响应。但是我不认为你能从构造器那里返回一个响应。您需要使用筛选器。

您无法从控制器构造函数返回响应-它不适合Laravel中请求生命周期的流程

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

a) 设置一个响应过滤器,处理您试图实现的任何功能,或者 b) 强制控制器操作返回响应。可以这样做:

class Api_Controller extends Base_Controller
{
    public $restful = true;

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

它确实有效-您只是做得不正确:)

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

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

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

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

META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"
尝试
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);
}

可能在设置状态代码之前已启动输出。。但是如果你在…上有错误报告,这应该很容易发现。错误报告在。。。我用
Response::json
\Response::json(…)
Response()->json(…)
的输出更新了这个问题;一个使用
Facade
,而另一个是函数。不过,这对于较新版本的Laravel确实有好处,因为我认为
response()
函数是在Laravel 5.0(或类似版本)中引入的,并且在Facades的文档中被引用。