dmf-software / aura-web-psr
PSR-7包装器,用于Aura.Web实现
Requires
- php: >=7.0
- aura/web: ^2.1
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
Requires (Dev)
- php-http/psr7-integration-tests: >=1.0
- phpunit/phpunit: >=6.5
Suggests
- rector/rector: to migrate any PHP 5.x implementations to meet the package requirements
This package is auto-updated.
Last update: 2024-08-29 05:41:56 UTC
README
简介
Aura.Web实现不遵循PSR-7,这是HTTP消息的建议。随着越来越多的解决常见HTTP消息问题的包实现这一建议,如果这些可以用于Aura.Web实现那就更好了。这个包允许您在不更改底层库的情况下开始实现PSR-7,以保持当前的代码使用1,从而简化迁移或重构。
安装
尽管Aura.Web仍然支持到PHP 5.3,但此包需要PHP 7.0或更高版本。旧版本需要迁移到PHP 7才能使用此包。我建议使用rector/rector使升级任务更加简单。
使用composer
composer require dmt-software/aura-web-psr
用法
创建ServerRequest
use DMT\Aura\Psr\Message\ServerRequest; // creating a request from $_SERVER variable $serverRequest = new ServerRequest( $_SERVER['REQUEST_METHOD'] ?? 'GET', $_SERVER['REQUEST_URI'] ?? '/', $_SERVER );
处理上传的文件
use DMT\Aura\Psr\Factory\UploadedFileFactory; use DMT\Aura\Psr\Message\ServerRequest; use DMT\Aura\Psr\Message\UploadedFile; /** @var ServerRequest $serverRequest */ $serverRequest = $serverRequest->withUploadedFiles( /** @var UploadedFileFactory $uploadedFileFactory */ $uploadedFileFactory->createUploadedFilesFromGlobalFiles($_FILES) ); // at some later point foreach ($serverRequest->getUploadedFiles() as $uploadedFile) { /** @var UploadedFile $uploadedFile */ if ($uploadedFile->getError() === \UPLOAD_ERR_OK) { // ... process the uploaded file } }
创建Response
use DMT\Aura\Psr\Message\Response; $response = new Response(200, 'Ok'); $response->getBody()->write(/** your response html */);
迁移期间的用法
包装对象
所有PSR-7 http消息包装一个Aura.Web对象。根据其职责,这可以是任何请求或响应对象。这些对象可以通过在http-message上调用getInnerObject()
方法来检索。
use DMT\Aura\Psr\Message\ServerRequest; $serverRequest = new ServerRequest( $_SERVER['REQUEST_METHOD'] ?? 'GET', $_SERVER['REQUEST_URI'] ?? '/', $_SERVER ); $request = $serverRequest->getInnerObject(); // somewhere within the "legacy" code if ($request->isPost()) { // process post data }
不可变性
对http消息的更改将由包装对象内部跟踪,但以保留消息不可变性的方式。这意味着对消息对象所做的每次更改都将返回一个新的Aura.Web对象实例。
use DMT\Aura\Psr\Message\ServerRequest; /** @var ServerRequest $serverRequest */ $auraRequest = $serverRequest->getInnerObject(); // new server request is returned with a fresh Aura.Web request $serverRequest = $serverRequest->withProtocolVersion('2'); $newAuraRequest = $serverRequest->getInnerObject(); if ($auraRequest->server->get('SERVER_PROTOCOL') != $newAuraRequest->server->get('SERVER_PROTOCOL')) { print 'Protocol version has changed'; }
确保每次更改http-message时,都必须从新的消息实例中检索aura请求。
不兼容性
当使用此包时,某些内置解决方案,如上传文件、接收JSON post等,将不可用。有关如何处理这些差异的概述,请参阅兼容性文档。
http消息使用(部分)Aura.Web对象并不意味着反过来也是真的。一些aura对象不由http消息管理。为了管理这些对象,可以回退到原始代码(一旦检索到内部对象)或使用/编写一些类似的工作代码。有关此方面的技巧和技巧,请参阅解决方案文档。