Improved HttpRequest casting code.

This commit is contained in:
flash 2025-03-08 20:34:33 +00:00
parent d5b5efab46
commit ecc9d9a348
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
2 changed files with 34 additions and 4 deletions

View file

@ -1 +1 @@
0.2503.82012
0.2503.82034

View file

@ -379,15 +379,45 @@ class HttpRequest extends HttpMessage implements ServerRequestInterface {
if($request instanceof HttpRequest)
return $request;
/** @var array<string, list<string|null>> */
$queryParams = (function(array $raw) {
$params = [];
foreach($raw as $name => $value) {
if(is_scalar($value))
$value = [$value];
if(!is_array($value))
$value = [null];
$params[(string)$name] = $value;
}
return $params;
})($request->getQueryParams());
$cookieParams = (function(array $raw) {
$params = [];
foreach($raw as $name => $value) {
if(!is_scalar($value))
continue;
$params[(string)$name] = (string)$value;
}
return $params;
})($request->getCookieParams());
return new HttpRequest(
$request->getProtocolVersion(),
$request->getHeaders(), // @phpstan-ignore-line: dont care
// @phpstan-ignore-next-line: interface erroneously defines as string[][] instead of array<string, string[]>
$request->getHeaders(),
$request->getBody(),
[],
$request->getMethod(),
HttpUri::castUri($request->getUri()),
$request->getQueryParams(), // @phpstan-ignore-line: dont care
$request->getCookieParams(), // @phpstan-ignore-line: dont care
$queryParams,
$cookieParams,
$request->getParsedBody(), // @phpstan-ignore-line: dont care
$request->getUploadedFiles(), // @phpstan-ignore-line: dont care
);