【问题标题】:Lumen returns always 200 for Controllers控制器的流明总是返回 200
【发布时间】:2018-11-12 20:02:04
【问题描述】:

我正在尝试做一个基于 Lumen 的小型 rest api。此示例一切正常:

routes/web.php

$router->post('foo/', function () {
    return response('[]', 400)
        ->header('Content-Type', 'application/json');
});

邮递员收到此回复:

400 - 错误请求。没关系。但是如果我尝试对控制器 php 文件做同样的事情:

routes/web.php

$router->post('accounts/', 'AccountController@register');

app/Http/Controllers/AccountController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class AccountController extends Controller {
    public function __construct() {}

    public function register(Request $request): string {
        return response()->json(['message' => 'failed'], 400);
    }
}

状态码是:200?但为什么? 标题来自身体反应...... 您能提出一些解决此案的建议吗?

【问题讨论】:

  • 尝试删除: string。可能会执行一些将Response 对象转换为string 的操作。
  • @u_mulder,谢谢!它有效!

标签: php lumen


【解决方案1】:

定义函数的返回类型,如string,告诉 php 将所有内容(除非声明了strict_types)将任何内容转换为string。我假设在Response 类的某个地方有一个__toString 方法,它可以输出您在图片中看到的数据。因此,只需删除返回类型声明。或将其更改为ResponseResponse 类的职责是处理数据并根据需要输出数据,而不是您的控制器:

public function register(Request $request) 
{
    return response()->json(['message' => 'failed'], 400);
}

【讨论】:

  • 谢谢!我已将返回类型更改为JsonResponse
  • 我知道这是一个老话题,但我面临同样的问题,在生产中,服务器总是返回 200,状态码,即使我明确设置了这个主题建议的响应。有任何可能覆盖此代码的 apache 配置吗?我问的是 apache,因为它在另一台服务器上按预期工作。
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
相关资源
最近更新 更多