Мост PSR-7
Дата обновления перевода 2023-08-25
Мост PSR-7
Мост PSR-7 преобразует объекты HttpFoundation из и в объекты, реализующие интерфейсы HTTP сообщений, определённых PSR-7.
Установка
1
$ composer require symfony/psr-http-message-bridge
Note
Если вы устанавливаете этот компонент вне приложения Symfony, вам нужно
подключить файл vendor/autoload.php
в вашем коде для включения механизма
автозагрузки классов, предоставляемых Composer. Детальнее читайте в
этой статье.
Мост также нуждается в реализации PSR-7 и PSR-17 для преобразования
объектов HttpFoundation в объекты PSR-7. Следующая команда устанавливает библиотеку
nyholm/psr7
, легкую и быструю реализацию PSR-7, но вы можете использовать любую из
библиотек, реализующих psr/http-factory-implementation
можно использовать любую из библиотек, реализующих psr/http-factory-implementation:
1
$ composer require nyholm/psr7
Использование
Преобразование из объектов HttpFoundation в PSR-7
Мост предоставляет интерфейс фабрики под названием HttpMessageFactoryInterface, который строит объекты, реализующие интерфейсы PSR-7 из объектов HttpFoundation.
Следующий отрезок кода объясняет, как преобразовать Request
в класс Nyholm\Psr7\ServerRequest
, реализуя интерфейс Psr\Http\Message\ServerRequestInterface`
:
1 2 3 4 5 6 7 8 9 10
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Component\HttpFoundation\Request;
$symfonyRequest = new Request([], [], [], [], [], ['HTTP_HOST' => 'dunglas.fr'], 'Content');
// Ключ сервера HTTP_HOST должен быть установлен, чтобы избежать неожиданной ошибки
$psr17Factory = new Psr17Factory();
$psrHttpFactory = new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
$psrRequest = $psrHttpFactory->createRequest($symfonyRequest);
И теперь из Response в класс
Nyholm\Psr7\Response
, реализующий интерфейс Psr\Http\Message\ResponseInterface
:
1 2 3 4 5 6 7 8 9
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Component\HttpFoundation\Response;
$symfonyResponse = new Response('Content');
$psr17Factory = new Psr17Factory();
$psrHttpFactory = new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
$psrResponse = $psrHttpFactory->createResponse($symfonyResponse);
Преобразование объектов, реализующих интерфейсы PSR-7 в HttpFoundation
С другой стороны, мост предоставляе интерфейс фабрики, под названием HttpFoundationFactoryInterface, который строит объекты HttpFoundation из объектов, реализующих интерфейсы PSR-7.
Следующий код объясняет, как преобразовать объект, реализующий
интерфейс Psr
в экземпляр
Request:
1 2 3 4 5 6
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
// $psrRequest - это экземпляр Psr\Http\Message\ServerRequestInterface
$httpFoundationFactory = new HttpFoundationFactory();
$symfonyRequest = $httpFoundationFactory->createRequest($psrRequest);
Из объекта, реализующего Psr
,
в экземпляр Response:
1 2 3 4 5 6
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
// $psrResponse - это экземпляр Psr\Http\Message\ResponseInterface
$httpFoundationFactory = new HttpFoundationFactory();
$symfonyResponse = $httpFoundationFactory->createResponse($psrResponse);