0 follower

Final Class Yiisoft\Yii\Runner\FrankenPHP\RequestFactory

InheritanceYiisoft\Yii\Runner\FrankenPHP\RequestFactory

RequestFactory creates an instance of a server request.

Public Methods

Hide inherited 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

Hide inherited methods

__construct() public method

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,
) {
}

            
create() public method

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;
}