The package allows responding with data that is automatically converted into PSR-7 response.
- PHP 7.4 or higher.
JSON
PHP extension.DOM
PHP extension.
The package could be installed via composer:
composer require yiisoft/data-response --prefer-dist
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"
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
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(),
]);
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
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.