slim / http
Slim PSR-7 对象装饰器
Requires
- php: ^8.0
- ext-fileinfo: *
- ext-json: *
- ext-libxml: *
- ext-simplexml: *
- psr/http-factory: ^1.0
- psr/http-message: ^1.1 || ^2.0
Requires (Dev)
- adriansuter/php-autoload-override: ^1.4
- doctrine/instantiator: ^1.3.1
- laminas/laminas-diactoros: ^3.1.0
- nyholm/psr7: ^1.8.1
- php-http/psr7-integration-tests: ^1.3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.6
- squizlabs/php_codesniffer: ^3.9
README
Slim PSR-7 对象装饰器
安装
建议您使用Composer来安装此库。
$ composer require slim/http
这将安装slim/http
组件和所有必需的依赖项。需要PHP 7.4或更高版本。
测试
要执行测试套件,您需要安装所有开发依赖项。
$ git clone https://github.com/slimphp/Slim-Http
$ composer install
$ composer test
使用方法
装饰仓库提供3个工厂,用于实例化装饰器。它们分别返回PSR-7兼容接口。
装饰响应工厂
装饰服务器请求工厂
装饰URI工厂
实例化装饰 Nyholm/Psr7 响应的示例
<?php use Nyholm\Psr7\Factory\Psr17Factory; use Slim\Http\Factory\DecoratedResponseFactory; $nyholmFactory = new Psr17Factory(); /** * DecoratedResponseFactory takes 2 parameters * @param \Psr\Http\Message\ResponseFactoryInterface which should be a ResponseFactory originating from the PSR-7 Implementation of your choice * @param \Psr\Http\Message\StreamFactoryInterface which should be a StreamFactory originating from the PSR-7 Implementation of your choice * Note: Nyholm/Psr17 has one factory which implements Both ResponseFactoryInterface and StreamFactoryInterface see https://github.com/Nyholm/psr7/blob/master/src/Factory/Psr17Factory.php */ $decoratedResponseFactory = new DecoratedResponseFactory($nyholmFactory, $nyholmFactory); /** * @var \Slim\Http\Response $response * The returned variable is a Response which has methods like withJson() */ $response = $decoratedResponseFactory->createResponse(200, 'OK'); $response = $response->withJson(['data' => [1, 2, 3]]);
实例化装饰 Laminas Diactoros 响应的示例
<?php use Laminas\Diactoros\ResponseFactory; use Laminas\Diactoros\StreamFactory; use Slim\Http\Factory\DecoratedResponseFactory; $responseFactory = new ResponseFactory(); $streamFactory = new StreamFactory(); /** * DecoratedResponseFactory takes 2 parameters * @param \Psr\Http\Message\ResponseFactoryInterface which should be a ResponseFactory originating from the PSR-7 Implementation of your choice * @param \Psr\Http\Message\StreamFactoryInterface which should be a StreamFactory originating from the PSR-7 Implementation of your choice */ $decoratedResponseFactory = new DecoratedResponseFactory($responseFactory, $streamFactory); /** * @var \Slim\Http\Response $response * The returned variable is a Response which has methods like withJson() */ $response = $decoratedResponseFactory->createResponse(200, 'OK'); $response = $response->withJson(['data' => [1, 2, 3]]);
装饰响应对象方法
装饰的ResponseInterface
提供了以下额外方法
Response::withJson($data, $status, $options, $depth)
Response::withFileDownload($file, $name)
触发客户端下载指定的文件。
Response::withFile($file, $contentType)
向客户端发送文件
Response::withRedirect($url, $status)
Response::write($data)
Response::isClientError()
断言基础响应的状态码在400和500之间。
Response::isEmpty()
断言基础响应的状态码是204, 205或304。
Response::isForbidden()
断言基础响应的状态码是403。
Response::isInformational()
断言基础响应的状态码在100和200之间。
Response::isOk()
断言基础响应的状态码是200。
Response::isNotFound()
断言基础响应的状态码是404。
Response::isRedirect()
断言基础响应的状态码是301、302、303、307或308。
Response::isRedirection()
断言基础响应的状态码在300和400之间。
Response::isServerError()
断言基础响应的状态码在500和600之间。
Response::isSuccessful()
断言基础响应的状态码在200和300之间。
Response::__toString()
将返回基础响应对象的格式化字符串表示。
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
{"Hello": "World"}
装饰服务器请求对象方法
装饰的ServerRequestInterface
提供了以下额外方法
ServerRequest::withAttributes($attributes)
ServerRequest::getContentCharset()
返回底层服务器请求对象的Content-Type
头中检测到的字符集。如果没有值,则返回null
。
ServerRequest::getContentType()
返回底层服务器请求对象的Content-Type
头中的值。如果没有值,则返回null
。
ServerRequest::getContentLength()
返回底层服务器请求对象的Content-Length
头中的值。如果没有值,则返回null
。
ServerRequest::getCookieParam($key, $default)
ServerRequest::getMediaType()
返回底层服务器请求对象的Content-Type
头中检测到的第一个值。如果没有值,则返回null
。
ServerRequest::getMediaTypeParams()
返回底层服务器请求对象的Content-Type
头中检测到的值的数组。如果没有值,则返回空数组。
ServerRequest::getParam($key, $default)
从 $_POST
或 $_GET
中获取键的值
ServerRequest::getParams()
返回合并了 $_POST
和 $_GET
参数的关联数组。
ServerRequest::getParsedBody()
如果底层PSR-7实现已经解析了,则返回底层服务器请求对象的解析后的主体。如果解析后的主体为空,我们的装饰器会尝试检测内容类型,并使用已注册的媒体类型解析器之一来解析主体。
默认的媒体类型解析器支持
- JSON
- XML
您可以使用 ServerRequest::registerMediaTypeParser()
方法注册自己的媒体类型解析器。
ServerRequest::getParsedBodyParam($key, $default)
返回底层服务器请求对象解析后的主体中键的值。
ServerRequest::getQueryParam($key, $default)
返回解析后的 ServerRequest
查询字符串中键的值
ServerRequest::getServerParam($key, $default)
返回底层服务器请求对象解析后的服务器参数中键的值。
ServerRequest::registerMediaTypeParser($key, $default)
返回底层服务器请求对象解析后的服务器参数中键的值。
ServerRequest::isMethod($method)
ServerRequest::isDelete()
断言底层服务器请求的方法是 DELETE
ServerRequest::isGet()
断言底层服务器请求的方法是 GET
ServerRequest::isHead()
断言底层服务器请求的方法是 HEAD
ServerRequest::isOptions()
断言底层服务器请求的方法是 OPTIONS
ServerRequest::isPatch()
断言底层服务器请求的方法是 PATCH
ServerRequest::isPost()
断言底层服务器请求的方法是 POST
ServerRequest::isPut()
断言底层服务器请求的方法是 PUT
ServerRequest::isXhr()
断言底层服务器请求的头部 X-Requested-With
是 XMLHttpRequest
装饰的 Uri 对象方法
装饰的 UriInterface
提供以下附加方法
Uri::getBaseUrl()
返回底层 uri 对象的完全限定基本 URL。
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全
如果您发现与安全相关的问题,请通过电子邮件发送至 [email protected],而不是使用问题跟踪器。
致谢
许可
本组件使用 MIT 许可证授权。有关更多信息,请参阅 许可文件。