PSR-7桥

3.4 版本
维护中的版本

PSR-7 Bridge把 HttpFoundation 对象转换成“实现了 PSR-7 所定义的HTTP message接口”的对象,或者把后者转换成前者。

安装 

你可以通过下述两种方式安装:

同时,这个桥接还需要一个PSR-7的实现,以允许把HttpFoundation对象转换到PSR-7对象。桥接提供了对 Zend Diactoros 的原生支持。使用Composer (zendframework/zend-diactoros on Packagist) 或参考项目文档来安装之。

用法 

从HttpFoundation对象转换到PSR-7 

这个桥提供了一个工厂接口,名为 HttpMessageFactoryInterface,产出的是“实现了HttpFoundation对象中的PSR-7接口”的对象。它也提供了一个使用Zend Diactoros的默认实现。

下列码段解释了如何将 Request 转换成一个 Zend Diactoros的实现了 ServerRequestInterface 接口的 ServerRequest 对象:

1
2
3
4
5
6
7
8
9
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
// HTTP_HOST对应的服务器必须被设置成避免未知错误
 
$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($symfonyRequest);

现在再把一个 Response 转换成 Zend Diactoros 的实现了 ResponseInterface 接口的 Response 对象:

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接口的对象转换到HttpFoundation 

另外一面,这个桥也提供了一个名为 HttpFoundationFactoryInterface 的工场接口,用于从那些实现了PSR-7接口对象来构建HttpFoundation对象。

下列码段解释了如何将一个实现了 ServerRequestInterface 接口的对象,给转换成一个 Request 实例:

1
2
3
4
5
6
7
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
 
// $psrRequest is an instance of Psr\Http\Message\ServerRequestInterface
// $psrRequest 是 Psr\Http\Message\ServerRequestInterface 接口的一个实例
 
$httpFoundationFactory = new HttpFoundationFactory();
$symfonyRequest = $httpFoundationFactory->createRequest($psrRequest);

再从一个实现了 ResponseInterface 接口的对象,转换成一个 Response 实例:

1
2
3
4
5
6
7
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
 
// $psrResponse is an instance of Psr\Http\Message\ResponseInterface
// $psrRequest 是 Psr\Http\Message\ResponseInterface 接口的一个实例
 
$httpFoundationFactory = new HttpFoundationFactory();
$symfonyResponse = $httpFoundationFactory->createResponse($psrResponse);

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)