yiisoft / data-response
Allows responding with data that is automatically converted into PSR-7 response
Fund package maintenance!
Open Collective
yiisoft
Installs: 148 898
Dependents: 24
Suggesters: 0
Security: 0
Stars: 14
Watchers: 16
Forks: 9
Open Issues: 2
Requires
- php: ^7.4|^8.0
- ext-dom: *
- ext-json: *
- psr/http-message: ^1.0
- psr/http-server-middleware: ^1.0
- yiisoft/http: ^1.2
- yiisoft/json: ^1.0
- yiisoft/strings: ^2.0
Requires (Dev)
- httpsoft/http-message: ^1.0
- phpunit/phpunit: ^9.5
- roave/infection-static-analysis-plugin: ^1.16
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.3
- yiisoft/di: ^1.1
This package is auto-updated.
Last update: 2023-11-08 05:49:30 UTC
README
Yii Data Response
The package allows responding with data that is automatically converted into PSR-7 response.
Requirements
- PHP 7.4 or higher.
JSON
PHP extension.DOM
PHP extension.
Installation
The package could be installed via composer:
composer require yiisoft/data-response --prefer-dist
General usage
The package provides DataResponseFactory
class that, given a PSR-17
response factory, is able to create data response.
Data response contains raw data to be processed later.
use Yiisoft\DataResponse\DataResponseFactory; /** * @var Psr\Http\Message\ResponseFactoryInterface $responseFactory */ $factory = new DataResponseFactory($responseFactory); $dataResponse = $factory->createResponse('test'); $dataResponse ->getBody() ->rewind(); echo $dataResponse ->getBody() ->getContents(); // "test"
Formatters
Formatter purpose is to format a data response. In the following example we format data as JSON.
use Yiisoft\DataResponse\DataResponseFactory; use Yiisoft\DataResponse\Formatter\JsonDataResponseFormatter; /** * @var Psr\Http\Message\ResponseFactoryInterface $responseFactory */ $factory = new DataResponseFactory($responseFactory); $dataResponse = $factory->createResponse('test'); $dataResponse = $dataResponse->withResponseFormatter(new JsonDataResponseFormatter()); $dataResponse ->getBody() ->rewind(); echo $dataResponse->getHeader('Content-Type'); // ["application/json; charset=UTF-8"] echo $dataResponse ->getBody() ->getContents(); // "test"
The following formatters are available:
HtmlDataResponseFormatter
JsonDataResponseFormatter
XmlDataResponseFormatter
Middleware
The package provides a PSR-15 middleware that is able to format a data response.
use Yiisoft\DataResponse\Middleware\FormatDataResponse; use Yiisoft\DataResponse\Formatter\JsonDataResponseFormatter; $middleware = (new FormatDataResponse(new JsonDataResponseFormatter())); //$middleware->process($request, $handler);
Also, the package provides PSR-15 middleware for content negotiation:
use Yiisoft\DataResponse\Formatter\HtmlDataResponseFormatter; use Yiisoft\DataResponse\Formatter\XmlDataResponseFormatter; use Yiisoft\DataResponse\Formatter\JsonDataResponseFormatter; use Yiisoft\DataResponse\Middleware\ContentNegotiator; $middleware = new ContentNegotiator([ 'text/html' => new HtmlDataResponseFormatter(), 'application/xml' => new XmlDataResponseFormatter(), 'application/json' => new JsonDataResponseFormatter(), ]);
You can override middlewares with method withContentFormatters()
:
$middleware->withContentFormatters([ 'application/xml' => new XmlDataResponseFormatter(), 'application/json' => new JsonDataResponseFormatter(), ]);
Testing
Unit testing
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
Mutation testing
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
License
The Data response is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.