Laravel 5.4在控制器返回之前的http响应代码

时间:2017-06-21 12:57:19

标签: php laravel laravel-5.4

我的问题很简单: 是否可以在控制器方法返回之前设置http响应代码(如果我返回一个php表,对于json响应)。

我知道可以这样做:

return response()->json($json,HTTP_CODE);

但我想要在控制器中的某处设置代码而不修改最终返回。 或者你知道一种方法来使本机php函数http_response_code工作吗? 因为Laravel在构建Response期间会覆盖它。 可能吗 ?或者你必须在回报中做到这一点?

我想知道是否可以这样做:

 public function myMethod(){
    //Some code
     $this->injectHttpCode(400); //or how to use native native http_response_code(400); ?
    //Some code
    return $this->json; //I dont want to modify that
 }

我不希望你回答任何“回复”,只要告诉我是否不可能。

2 个答案:

答案 0 :(得分:0)

如果您想要某种标准方式来处理响应代码,最简单的方法是使用包含此内容的基础BaseController

protected function getResponseStatusCode() : int
{
    switch (request()->getMethod()) {
        case 'GET':
        case 'PUT':
            return 200;
        case 'POST':
            return 201;
        case 'DELETE':
            return 204;
        default:
            return request()->getMethod();
    }
}

public function respond($json) 
{
    return response()->json($json, $this->getResponseStatusCode());
}

所以在你的控制器中你只能用:

调用基本控制器中的方法
return $this->respond($json);

答案 1 :(得分:0)

如何使用response()函数执行以下操作:

public function myMethod(){
    $response = response();

    //Some code
     $response->setStatusCode(400);

    return $response->json([]);
 }