【问题标题】:Request parameters are empty using Slim v4.1使用 Slim v4.1 请求参数为空
【发布时间】:2019-08-07 21:41:28
【问题描述】:

我正在使用Slim v4 来获取一些 arduino 组件 API。当我通过控制器调用 POST 时,我得到一个空的请求正文,没有我发送给它的参数。

在下面的代码中,$parameters 变量中我有一个 NULL。

public function __invoke(
    ServerRequestInterface $request,
    ResponseInterface $response
) : ResponseInterface {
    $ret = [
        'success'   => false
    ];

    $parameters = (array) $request->getParsedBody();
}

我正在使用 postman 执行 CURL 请求,但当我在 bash 中使用 curl 时也会出现此错误。

下面的代码是我注册新 API 调用的方式。

$application = AppFactory::create();

$application->group('/ambient', function(RouteCollectorProxy $routeCollector) {
    $routeCollector
        ->post('/register', RegisterAmbientController::class)
        ->setName('register-ambient');
});

你也可以在我的github上看到完整的代码: https://github.com/JasterTDC/ardu-component/tree/feature/register-temp-humidity

提前致谢!

【问题讨论】:

    标签: php slim


    【解决方案1】:

    Slim 4 不会自动解析正文,除非它是基于表单的 POST 请求。如果您的负载是 POST 或 PUT 中的 JSON 或 XML,那么您将需要一些正文解析中间件。

    为 Slim 4 添加了BodyParsingMiddleware yesterday

    使用它的最简单方法是在创建$app 实例后添加$app->addBodyParsingMiddleware();。这样的工作:

    use Psr\Http\Message\ResponseInterface;
    use Psr\Http\Message\ServerRequestInterface;
    use Slim\Factory\AppFactory;
    use Slim\Middleware\BodyParsingMiddleware;
    use Slim\Psr7\Response;
    
    $app = AppFactory::create();
    $app->addBodyParsingMiddleware();
    
    $app->post('/data', function (ServerRequestInterface $request): ResponseInterface {
        $data = $request->getParsedBody();
    
        $response = new Response();
        $response->getBody()->write(
            print_r($data, true)
        );
        return $response;
    });
    
    $app->run();
    

    但请注意,您需要在 composer.json 中使用 dev-4.x 或等待 4.1 之后的下一个次要版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2016-09-06
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多