Міст 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:
1
$ composer require nyholm/psr7
Використання
Перетворення з обʼєктів HttpFoundation на PSR-7
Міст надає інтерфейс фабрики під назвою HttpMessageFactoryInterface, який будує обʼєкти, що реалізують інтерфейси PSR-7 з обʼєктів HttpFoundation. Він також надає реалізацію за замовчуванням, використовуючи Zend Diactoros внутрішньо.
Наступний уривок коду пояснює, як перетворити 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);