Final Class Yiisoft\Yii\Runner\FrankenPHP\RequestFactory
| Inheritance | Yiisoft\Yii\Runner\FrankenPHP\RequestFactory |
|---|
RequestFactory creates an instance of a server request.
Public Methods
| Method | Description | Defined By |
|---|---|---|
| __construct() | Yiisoft\Yii\Runner\FrankenPHP\RequestFactory | |
| create() | Creates an instance of a server request from custom parameters. | Yiisoft\Yii\Runner\FrankenPHP\RequestFactory |
Method Details
| public mixed __construct ( \Psr\Http\Message\ServerRequestFactoryInterface $serverRequestFactory, \Psr\Http\Message\UriFactoryInterface $uriFactory, \Psr\Http\Message\UploadedFileFactoryInterface $uploadedFileFactory, \Psr\Http\Message\StreamFactoryInterface $streamFactory ) | ||
| $serverRequestFactory | \Psr\Http\Message\ServerRequestFactoryInterface | |
| $uriFactory | \Psr\Http\Message\UriFactoryInterface | |
| $uploadedFileFactory | \Psr\Http\Message\UploadedFileFactoryInterface | |
| $streamFactory | \Psr\Http\Message\StreamFactoryInterface | |
public function __construct(
private readonly ServerRequestFactoryInterface $serverRequestFactory,
private readonly UriFactoryInterface $uriFactory,
private readonly UploadedFileFactoryInterface $uploadedFileFactory,
private readonly StreamFactoryInterface $streamFactory,
) {
}
Creates an instance of a server request from custom parameters.
| public \Psr\Http\Message\ServerRequestInterface create ( false|resource|null $body = null ) | ||
| $body | false|resource|null | |
| return | \Psr\Http\Message\ServerRequestInterface |
The server request instance. |
|---|---|---|
public function create(mixed $body = null): ServerRequestInterface
{
// Create a base request
$method = $_SERVER['REQUEST_METHOD'] ?? null;
if ($method === null) {
throw new RuntimeException('Unable to determine HTTP request method.');
}
$request = $this->serverRequestFactory->createServerRequest($method, $this->createUri(), $_SERVER);
// Add headers
foreach ($this->getHeaders() as $name => $value) {
if ($name === 'Host' && $request->hasHeader('Host')) {
continue;
}
$request = $request->withAddedHeader($name, $value);
}
// Add protocol
$protocol = '1.1';
if (array_key_exists('SERVER_PROTOCOL', $_SERVER) && $_SERVER['SERVER_PROTOCOL'] !== '') {
$protocol = str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']);
}
$request = $request->withProtocolVersion($protocol);
// Add body
$body ??= fopen('php://input', 'rb');
if ($body !== false) {
$request = $request->withBody(
$this->streamFactory->createStreamFromResource($body)
);
}
// Parse body
if ($method === 'POST') {
$contentType = $request->getHeaderLine('content-type');
if (preg_match('~^application/x-www-form-urlencoded($| |;)~', $contentType)
|| preg_match('~^multipart/form-data($| |;)~', $contentType)
) {
$request = $request->withParsedBody($_POST);
}
}
// Add query and cookie params
$request = $request
->withQueryParams($_GET)
->withCookieParams($_COOKIE);
// Add uploaded files
$files = [];
foreach ($_FILES as $class => $info) {
$files[$class] = [];
$this->populateUploadedFileRecursive(
$files[$class],
$info['name'],
$info['tmp_name'],
$info['type'],
$info['size'],
$info['error'],
);
}
$request = $request->withUploadedFiles($files);
return $request;
}
Signup or Login in order to comment.