Мост PSR-7

Мост PSR-7

Мост PSR-7 конвертирует из объектов HttpFoundation и в объекты, внедряющие интерфейсы HTTP-сообщений, определённые PSR-7.

Установка

Вы можете установить компонент 2 разными способами:

Мосту также потребуется внедрение PSR-7, чтобы разрешить конвертацию объектов HttpFoundation в объекты PSR-7. Он предоставляет родную поддержку для Zend Diactoros. Используйте Composer (zendframework/zend-diactoros on Packagist) или обратитесь к документации проекта для установки.

Использование

Конвертация из HttpFoundation Objects в PSR-7

Мост предоставляет интерфейс для фабрики (производства) по имени
HttpMessageFactoryInterface, которая строит объекты, внедряя интерфейсы PSR-7 из объектов HttpFoundation. Она также предоставляет внедрение по умолчанию, внутренне используя Zend Diactoros.

Следующий отрезок кода объясняет, как конвертировать Request в Zend Diactoros ServerRequest, внедряя интерфейс ServerRequestInterface:

1
2
3
4
5
6
7
8
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Symfony\Component\HttpFoundation\Request;

$symfonyRequest = new Request(array(), array(), array(), array(), array(), array('HTTP_HOST' => 'dunglas.fr'), 'Content');
// ключ сервера HTTP_HOST должен быть установлен так, чтобы избежать неожиданной ошибки

$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($symfonyRequest);

А теперь от Response к Zend Diactoros Response, внедряя интерфейс ResponseInterface:

1
2
3
4
5
6
7
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Symfony\Component\HttpFoundation\Response;

$symfonyResponse = new Response('Content');

$psr7Factory = new DiactorosFactory();
$psrResponse = $psr7Factory->createResponse($symfonyResponse);

Конвертация объектов, внедряя интерфейсы PSR-7 Interfaces в HttpFoundation

С другой стороны, мост предоставляет фабрике интерфейс под названием HttpFoundationFactoryInterface, который строит объекты HttpFoundation из объектов, внедряющих интерфейсы PSR-7.

Следующий отрезок кода объясняет, как конвертировать объект, внедряющий интерфейс ServerRequestInterface в экземпляр 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);

Из объекта, внедряющего ResponseInterface в экземпляр 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);