如何解决捕获传入的请求数据
我一直在试验 routing 的 thephpleague 的最新版本。
<?PHP declare(strict_types=1);
use Laminas\Diactoros\ServerRequestFactory;
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Laminas\Diactoros\ResponseFactory;
use League\Route\Router;
use League\Route\Strategy\JsonStrategy;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
$strategy = new JsonStrategy(new ResponseFactory());
$router = new Router;
$router->setStrategy($strategy);
$router->post(
'/hello',function (ServerRequestInterface $request): ResponseInterface
{
var_dump($request->getParsedBody());
}
);
$request = ServerRequestFactory::fromGlobals(
$_SERVER,$_GET,$_POST,$_COOKIE,$_FILES
);
$response = $router->dispatch($request);
// send the response to the browser
(new SapiEmitter)->emit($response);
我的问题是当我发送包含 POST
数据的 JSON
请求时,我无法在我的代码中捕获它,如行 var_dump($request->getParsedBody());
所示。
目前,我能够捕获随请求发送的数据的唯一方法是运行 json_decode(file_get_contents('PHP://input'),true);
。
为了让负载随任何请求一起发送,我需要做什么,无论是 GET
、POST
、PUT
、PATCH
还是其他?
谢谢。
解决方法
我终于明白了。经过仔细检查,我认为使用 dependency injection,ServerRequestInterface
映射到 Laminas\Diactoros\ServerRequest
。
所以,为了说明
$router->post(
'/hello',function (ServerRequestInterface $request): ResponseInterface {
var_dump(
$request->getHeaders(),$request->getParsedBody(),$request->getQueryParams(),$request->getUploadedFiles(),$request->getBody()->getContents(),$request // Laminas\Diactoros\ServerRequest
);
}
);
哪里
-
$request->getHeaders()
为您提供请求标头 -
$request->getParsedBody()
将在设置标头Content-Type: multipart/form-data
时以数组形式返回所有数据(至少我已经尝试过) -
$request->getQueryParams()
将所有查询字符串参数作为数组给出,就像$_GET
-
$request->getUploadedFiles()
将所有上传的文件作为Laminas\Diactoros\UploadedFile
的实例数组 -
$request->getBody()->getContents()
将在设置标头Content-Type: application/json
时将所有数据作为字符串返回。然后,您可以运行json_decode($request->getBody()->getContents(),true)
以获取数组的实际内容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。