使用Slim v4.1时,请求参数为空
我将Slim v4
用于一个小的Arduino组件API。当我在我的控制器上执行POST
调用时,我得到一个空的请求正文,没有我发送给它的参数。
$parameters
变量i中有一个空。
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');
});
您还可以在My GitHub中查看完整代码: https://github.com/JasterTDC/ardu-component/tree/feature/register-temp-humidity
提前谢谢!
解决方案
Slim 4不会自动解析正文,除非它是基于表单的POST请求。如果您的有效负载是POST或PUT中的JSON或XML,那么您将需要一些正文解析中间件。
BodyParsingMiddleware
为超薄4添加了yesterday。
$app
实例后添加$app->addBodyParsingMiddleware();
。类似这样的工作方式:
use PsrHttpMessageResponseInterface;
use PsrHttpMessageServerRequestInterface;
use SlimFactoryAppFactory;
use SlimMiddlewareBodyParsingMiddleware;
use SlimPsr7Response;
$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之后的下一个次要版本。
相关文章