FrankenPHP\Request
(True Async 0.6+)
Объект Request передаётся в callback-обработчик через HttpServer::onRequest(). Он предоставляет доступ только для чтения ко всем данным HTTP-запроса.
Каждая корутина запроса получает собственный экземпляр Request — общих глобальных переменных нет, поэтому параллельные обработчики всегда безопасны.
Обзор класса
namespace FrankenPHP;
class Request
{
public function getMethod(): string;
public function getUri(): string;
public function getHeader(string $name): ?string;
public function getHeaders(): array;
public function getBody(): string;
public function getQueryParams(): array;
public function getCookies(): array;
public function getHost(): string;
public function getRemoteAddr(): string;
public function getScheme(): string;
public function getProtocolVersion(): string;
public function getParsedBody(): array;
public function getUploadedFiles(): array;
}Методы
getMethod
public Request::getMethod(): stringВозвращает HTTP-метод: GET, POST, PUT, DELETE и т.д.
getUri
public Request::getUri(): stringВозвращает полный URI запроса, включая query string (например, /api/users?page=2).
getHeader
public Request::getHeader(string $name): ?stringВозвращает значение одного заголовка по имени или null, если заголовок отсутствует. Имена заголовков нечувствительны к регистру.
getHeaders
public Request::getHeaders(): arrayВозвращает все заголовки в виде ассоциативного массива name => value. Если заголовок имеет несколько значений, они объединяются через , .
getBody
public Request::getBody(): stringВозвращает полное тело запроса в виде строки. Тело читается один раз и кешируется — последующие вызовы возвращают то же значение.
getQueryParams
public Request::getQueryParams(): arrayВозвращает разобранные и декодированные параметры query string в виде ассоциативного массива.
getCookies
public Request::getCookies(): arrayВозвращает cookies, разобранные из заголовка Cookie, в виде ассоциативного массива name => value.
getHost
public Request::getHost(): stringВозвращает значение заголовка Host.
getRemoteAddr
public Request::getRemoteAddr(): stringВозвращает адрес клиента в формате ip:port.
getScheme
public Request::getScheme(): stringВозвращает http или https.
getProtocolVersion
public Request::getProtocolVersion(): stringВозвращает версию HTTP-протокола, например HTTP/1.1 или HTTP/2.0.
getParsedBody
public Request::getParsedBody(): arrayВозвращает поля формы из тел application/x-www-form-urlencoded и multipart/form-data в виде ассоциативного массива.
getUploadedFiles
public Request::getUploadedFiles(): arrayВозвращает загруженные файлы в виде массива объектов FrankenPHP\UploadedFile. Несколько файлов для одного поля возвращаются как массив.
Примеры
Пример #1 Маршрутизация по методу и пути
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
HttpServer::onRequest(function (Request $request, Response $response): void {
$method = $request->getMethod();
$path = parse_url($request->getUri(), PHP_URL_PATH);
if ($method === 'GET' && $path === '/health') {
$response->setStatus(200);
$response->write('OK');
$response->end();
return;
}
$response->setStatus(404);
$response->write('Not Found');
$response->end();
});Пример #2 Чтение параметров запроса и cookies
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
HttpServer::onRequest(function (Request $request, Response $response): void {
$cookies = $request->getCookies();
$params = $request->getQueryParams();
$name = $params['name'] ?? $cookies['username'] ?? 'Guest';
$response->setStatus(200);
$response->setHeader('Content-Type', 'text/plain');
$response->write("Hello, {$name}!");
$response->end();
});Пример #3 Обработка JSON-тела
<?php
use FrankenPHP\HttpServer;
use FrankenPHP\Request;
use FrankenPHP\Response;
HttpServer::onRequest(function (Request $request, Response $response): void {
if ($request->getMethod() !== 'POST') {
$response->setStatus(405);
$response->end();
return;
}
$data = json_decode($request->getBody(), true);
$response->setStatus(200);
$response->setHeader('Content-Type', 'application/json');
$response->write(json_encode(['received' => $data]));
$response->end();
});Смотрите также
- FrankenPHP\Response -- Формирование и отправка ответов
- FrankenPHP\UploadedFile -- Работа с загруженными файлами
- Руководство по FrankenPHP -- Установка, конфигурация и развёртывание