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