支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
PSR-7 Bridge把 HttpFoundation 对象转换成“实现了 PSR-7 所定义的HTTP message接口”的对象,或者把后者转换成前者。
你可以通过下述两种方式安装:
通过Composer安装(Packagist上的symfony/psr-http-message-bridge
)
通过官方Git宝库(https://github.com/symfony/psr-http-message-bridge)
同时,这个桥接还需要一个PSR-7的实现,以允许把HttpFoundation对象转换到PSR-7对象。桥接提供了对 Zend Diactoros 的原生支持。使用Composer (zendframework/zend-diactoros on Packagist) 或参考项目文档来安装之。
这个桥提供了一个工厂接口,名为 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); |
另外一面,这个桥也提供了一个名为 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 创作共用授权。