使用 Slim v4.1 请求参数为空
Request parameters are empty using Slim v4.1
我正在使用 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
提前致谢!
Slim 4 不会自动解析正文,除非它是基于表单的 POST 请求。如果您的有效负载是 JSON 或 XML 在 POST 或 PUT 中,那么您将需要一些主体解析中间件。
BodyParsingMiddleware
添加了 Slim 4 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 之后的下一个次要版本。
我正在使用 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
提前致谢!
Slim 4 不会自动解析正文,除非它是基于表单的 POST 请求。如果您的有效负载是 JSON 或 XML 在 POST 或 PUT 中,那么您将需要一些主体解析中间件。
BodyParsingMiddleware
添加了 Slim 4 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 之后的下一个次要版本。