robbie / psr7-adapters
适用于SilverStripe HTTP类的PSR-7兼容适配器
1.0.3
2023-05-10 23:20 UTC
Requires
- php: >=5.6.0
- guzzlehttp/psr7: ^1.3 || ^2.0
- silverstripe/framework: ^4.0 || ^5.0
Requires (Dev)
- phpunit/phpunit: ^5.7
README
为SilverStripe HTTP类提供PSR-7兼容的不可变适配器接口。
要求
silverstripe/framework
^4.0guzzlehttp/psr7
安装
使用Composer进行安装
composer require robbie/psr7-adapters
在浏览器URL中添加?flush=1
,在sake
命令参数中添加flush=1
或在ssconsole
中添加--flush
。
使用
转换为PSR-7
本模块通过提供一个预先配置并准备好发送到客户端/服务器的适配器类的HTTPRequest
或HTTPResponse
类来工作
HTTPRequest
使用Robbie\Psr7\HttpRequestAdapter
类HTTPResponse
使用Robbie\Psr7\HttpResponseAdapter
类
要检索预配置的PSR-7 ServerRequestInterface
或ResponseInterface
,可以在这些类中调用->toPsr7($request)
,例如
<?php $myResponse = new \SilverStripe\Control\HTTPResponse( json_encode(['success' => true, 'message' => 'Your request was successful!']), 200, 'OK' ); /** @var \Psr\Http\Message\ResponseInterface $response */ $response = (new \Robbie\Psr7\HttpResponseAdapter)->toPsr7($myResponse);
从这里,您可以使用PSR-7接口的任何方法,并且结果将是不可变的
<?php $newResponse = $response->withHeader('Content-Type', 'application/json'); $newResponse = $newResponse->withHeader('X-Custom-Header', 'my-value-here'); // $response !== $newResponse -> #psr7-ftw
相同的原理适用于HttpRequestAdapter
,例如
<?php # Context: PageController use Robbie\Psr7\HttpRequestAdapter; // ... $request = $this->getRequest(); $adapter = new HttpRequestAdapter; $psrInterface = $adapter->toPsr7($request); // Outputs all your initial request headers: print_r($psrInterface->getHeaders());
从PSR-7转换
要将PSR-7接口返回到HTTPRequest
或HTTPResponse
类,只需执行与到相同的操作,只需使用->fromPsr7($input)
代替
<?php // $requestInterface is an instance of Psr\Http\Message\ServerRequestInterface $httpRequest = (new HttpRequestAdapter)->fromPsr7($requestInterface);
$httpRequest
现在是一个SilverStripe\Control\HTTPRequest
实例。