控制器流明 returns 始终为 200

Lumen returns always 200 for Controllers

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

routes/web.php

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

邮递员收到此回复:

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

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?但为什么? Headers 进入 body 回复... 您能提供一些解决此案的建议吗?

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

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