robbie/psr7-adapters

适用于SilverStripe HTTP类的PSR-7兼容适配器

安装量: 11,479

依赖项: 2

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 5

开放问题: 3

类型:silverstripe-vendormodule

1.0.3 2023-05-10 23:20 UTC

This package is auto-updated.

Last update: 2024-09-11 02:07:31 UTC


README

Build Status Scrutinizer Code Quality codecov

为SilverStripe HTTP类提供PSR-7兼容的不可变适配器接口。

要求

  • silverstripe/framework ^4.0
  • guzzlehttp/psr7

安装

使用Composer进行安装

composer require robbie/psr7-adapters

在浏览器URL中添加?flush=1,在sake命令参数中添加flush=1或在ssconsole中添加--flush

使用

转换为PSR-7

本模块通过提供一个预先配置并准备好发送到客户端/服务器的适配器类的HTTPRequestHTTPResponse类来工作

  • HTTPRequest使用Robbie\Psr7\HttpRequestAdapter
  • HTTPResponse使用Robbie\Psr7\HttpResponseAdapter

要检索预配置的PSR-7 ServerRequestInterfaceResponseInterface,可以在这些类中调用->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接口返回到HTTPRequestHTTPResponse类,只需执行与相同的操作,只需使用->fromPsr7($input)代替

<?php

// $requestInterface is an instance of Psr\Http\Message\ServerRequestInterface
$httpRequest = (new HttpRequestAdapter)->fromPsr7($requestInterface);

$httpRequest现在是一个SilverStripe\Control\HTTPRequest实例。