返回首页 Symfony2 Cookbook

Assetic

Bundles

缓存

Composer

配置

控制台

Controller

调试

部署

Doctrine

电子邮件

事件分发器

表达式

表单

前端

日志

分析器

请求

路由

安全

序列化

服务容器

会话

PSR-7

Symfony 版本

模板

测试

升级

验证

Web 服务器

Web 服务

工作流

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);