Slim 3 getParsedBody() 总是空的
Slim 3 getParsedBody() always null and empty
我正在使用 Slim Framework Version 3,但遇到了一些问题。
$app-> post('/', function($request, $response){
$parsedBody = $request->getParsedBody()['email'];
var_dump($parsedBody);
});
结果总是:
null
你能帮帮我吗?
请试试这个方法:
$app-> post('/yourFunctionName', function() use ($app) {
$parameters = json_decode($app->request()->getBody(), TRUE);
$email = $parameters['email'];
var_dump($email);
});
希望对您有所帮助!
这取决于您如何向路由发送数据。这是一条 POST 路由,因此默认情况下它会期望 body 数据为标准格式 (application/x-www-form-urlencoded
)。
如果您要发送 JSON 到此路由,则需要将 Content-type
header 设置为 application/json
。即卷曲看起来像:
curl -X POST -H "Content-Type: application/json" \
-d '{"email": "a@example.com"}' http://localhost/
此外,您应该验证您要查找的数组键是否存在:
$parsedBody = $request->getParsedBody()
$email = $parsedBody['email'] ?? false;
在 Slim 3 中,您必须为此注册一个 Media-Type-Parser 中间件。
http://www.slimframework.com/docs/v3/objects/request.html
$app->add(function ($request, $response, $next) {
// add media parser
$request->registerMediaTypeParser(
"text/javascript",
function ($input) {
return json_decode($input, true);
}
);
return $next($request, $response);
});
当我切换到 slimframework 版本 4 时,我不得不添加:
$app->addBodyParsingMiddleware();
否则正文始终为空(即使是 getBody())
我正在使用 Slim Framework Version 3,但遇到了一些问题。
$app-> post('/', function($request, $response){
$parsedBody = $request->getParsedBody()['email'];
var_dump($parsedBody);
});
结果总是:
null
你能帮帮我吗?
请试试这个方法:
$app-> post('/yourFunctionName', function() use ($app) {
$parameters = json_decode($app->request()->getBody(), TRUE);
$email = $parameters['email'];
var_dump($email);
});
希望对您有所帮助!
这取决于您如何向路由发送数据。这是一条 POST 路由,因此默认情况下它会期望 body 数据为标准格式 (application/x-www-form-urlencoded
)。
如果您要发送 JSON 到此路由,则需要将 Content-type
header 设置为 application/json
。即卷曲看起来像:
curl -X POST -H "Content-Type: application/json" \
-d '{"email": "a@example.com"}' http://localhost/
此外,您应该验证您要查找的数组键是否存在:
$parsedBody = $request->getParsedBody()
$email = $parsedBody['email'] ?? false;
在 Slim 3 中,您必须为此注册一个 Media-Type-Parser 中间件。
http://www.slimframework.com/docs/v3/objects/request.html
$app->add(function ($request, $response, $next) {
// add media parser
$request->registerMediaTypeParser(
"text/javascript",
function ($input) {
return json_decode($input, true);
}
);
return $next($request, $response);
});
当我切换到 slimframework 版本 4 时,我不得不添加:
$app->addBodyParsingMiddleware();
否则正文始终为空(即使是 getBody())