跳到内容

PSR-7 Bridge

编辑此页

PSR-7 bridge 转换来自 HttpFoundation 对象以及转换为由 PSR-7 定义的 HTTP 消息接口的对象。

安装

1
$ composer require symfony/psr-http-message-bridge

注意

如果您在 Symfony 应用程序之外安装此组件,则必须在代码中 require vendor/autoload.php 文件,以启用 Composer 提供的类自动加载机制。阅读这篇文章了解更多详情。

该 bridge 也需要 PSR-7 和 PSR-17 实现,以将 HttpFoundation 对象转换为 PSR-7 对象。以下命令安装了轻量级且快速的 PSR-7 实现库 nyholm/psr7,但您可以使用任何实现了 psr/http-factory-implementation 的库

1
$ composer require nyholm/psr7

用法

从 HttpFoundation 对象转换为 PSR-7

该 bridge 提供了一个名为 HttpMessageFactoryInterface 的工厂接口,该接口从 HttpFoundation 对象构建实现 PSR-7 接口的对象。

以下代码片段解释了如何将 Request 转换为实现 Psr\Http\Message\ServerRequestInterface 接口的 Nyholm\Psr7\ServerRequest

1
2
3
4
5
6
7
8
9
10
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Component\HttpFoundation\Request;

$symfonyRequest = new Request([], [], [], [], [], ['HTTP_HOST' => 'dunglas.fr'], 'Content');
// The HTTP_HOST server key must be set to avoid an unexpected error

$psr17Factory = new Psr17Factory();
$psrHttpFactory = new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
$psrRequest = $psrHttpFactory->createRequest($symfonyRequest);

现在从 Response 转换为实现 Psr\Http\Message\ResponseInterface 接口的 Nyholm\Psr7\Response

1
2
3
4
5
6
7
8
9
use Nyholm\Psr7\Factory\Psr17Factory;
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
use Symfony\Component\HttpFoundation\Response;

$symfonyResponse = new Response('Content');

$psr17Factory = new Psr17Factory();
$psrHttpFactory = new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
$psrResponse = $psrHttpFactory->createResponse($symfonyResponse);

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

另一方面,该 bridge 提供了一个名为 HttpFoundationFactoryInterface 的工厂接口,该接口从实现 PSR-7 接口的对象构建 HttpFoundation 对象。

下一个代码片段解释了如何将实现 Psr\Http\Message\ServerRequestInterface 接口的对象转换为 Request 实例

1
2
3
4
5
6
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;

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

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

从实现 Psr\Http\Message\ResponseInterface 的对象转换为 Response 实例

1
2
3
4
5
6
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;

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

$httpFoundationFactory = new HttpFoundationFactory();
$symfonyResponse = $httpFoundationFactory->createResponse($psrResponse);
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本