离线下载
PDF版 ePub版

极客学院团队出品 · 更新于 2018-11-28 11:00:43

PSR-7 Bridge

The PSR-7 bridge 将 HttpFoundation 对象转换到实现 HTTP message 接口的对象,定义在 PSR-7

安装

您可以用 2 种不同的方式安装组件:

Bridge 也需要一个 PSR-7 实现来允许将 HttpFoundation 对象转化为 PSR-7 对象。它为 Zend Diactoros 提供原生支持。使用 Composer(zendframework/zend-diactoros on Packagist)或者查阅项目文档来安装它。

使用

从 HttpFoundation 对象到 PSR-7 的转换

Bridge 提供一个名为 HttpMessageFactoryInterface 的一个 factory 的接口,它可以从 HttpFoundation 对象构造实现 PSR-7 的接口的对象。它也提供了一个内部使用 Zend Diactoros 的默认的实现。

下面的代码片段说明了如何将一个 Request 转换成一个 Zend Diactoros ServerRequest 实现 ServerRequestInterface 接口:

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');
// The HTTP_HOST server key must be set to avoid an unexpected error

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

现在从一个 Response 到一个实现 ResponseInterface 接口的 Zend Diactoros Response

use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Symfony\Component\HttpFoundation\Response;

$symfonyResponse = new Response('Content');

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

转换对象实现 PSR-7 到 HttpFoundation 的接口

另一方面,bridge 提供一个名为 HttpFoundationFactoryInterface 的一个 factory 的接口,它可以从实现 PSR-7 的接口的对象构造 HttpFoundation 对象。

下一段代码解释如何将一个实现 ServerRequestInterface 接口的对象转变为一个 Request 实例。

use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;

// $psrRequest is an instance of Psr\Http\Message\ServerRequestInterface

$httpFoundationFactory = new HttpFoundationFactory();
$symfonyRequest = $httpFoundationFactory->createRequest($psrRequest);

从一个实现 ResponseInterface 的对象到一个 Response 实例:

use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;

// $psrResponse is an instance of Psr\Http\Message\ResponseInterface

$httpFoundationFactory = new HttpFoundationFactory();
$symfonyResponse = $httpFoundationFactory->createResponse($psrResponse);