Люмен всегда возвращает 200 для контроллеров - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь сделать небольшой API для отдыха, основанный на Lumen.Все в порядке для этого образца:

маршрутов / web.php

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

почтальон получает этот ответ:

400

400 - неверный запрос.Это нормально.Но если я попытаюсь сделать то же самое с php-файлом контроллера:

route / 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);
    }
}

enter image description here

Код состояния: 200?Но почему?Заголовки пришли в ответ тела ... Можете ли вы посоветовать что-нибудь, чтобы решить это дело?

1 Ответ

0 голосов
/ 03 июня 2018

Определяя тип возвращаемого значения функции, например string, вы говорите php, чтобы все (если не объявлено strict_types) преобразовывало что-либо в string.Я предполагаю, что где-то в классе Response есть метод __toString, который выводит данные, как вы видите на картинке.Итак, просто удалите декларацию возвращаемого типа.Или измените его на Response.Класс Response отвечает за обработку данных и вывод их по мере необходимости, а не за ваш контроллер:

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