akrabat / rka-content-type-renderer
根据PSR-7请求的Accept头部,将数组渲染为JSON/XML/HTML PSR-7响应。
2.0
2021-10-06 14:46 UTC
Requires
- php: ^7.3 || ^8.0
- psr/http-message: ^1.0
- willdurand/negotiation: ^3.0
Requires (Dev)
- crell/api-problem: ^3.2
- laminas/laminas-diactoros: ^2.8
- nocarrier/hal: ^0.9.12
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.5
Suggests
- crell/api-problem: For creating Api-Problem (RFC7801) data that can be rendered using ApiProblemRenderer
- nocarrier/hal: For creating HAL documents that can be rendered using HalRenderer
README
根据PSR-7请求的Accept头部,将数组(或HAL对象)渲染为JSON/XML/HTML PSR-7响应。
安装
composer require akrabat/rka-content-type-renderer
用法
// given: // $request instanceof Psr\Http\Message\RequestInterface // $response instanceof Psr\Http\Message\ResponseInterface $data = [ 'items' => [ [ 'name' => 'Alex', 'is_admin' => true, ], [ 'name' => 'Robin', 'is_admin' => false, ], ], ]; $renderer = new RKA\ContentTypeRenderer\Renderer(); $response = $renderer->render($request, $response, $data); return $response->withStatus(200);
构造函数接受一个名为 $pretty
的参数,默认为 true
。设置为 false
可禁用美化打印。
HalRenderer
此组件还支持使用 HalRenderer
的 nocarrier/hal 对象。
$hal = new Nocarrier\Hal( '/foo', [ 'items' => [ [ 'name' => 'Alex', 'is_admin' => true, ], [ 'name' => 'Robin', 'is_admin' => false, ], ], ] ); $renderer = new RKA\ContentTypeRenderer\HalRenderer(); $response = $renderer->render($request, $response, $hal); return $response->withStatus(200);
ApiRenderer
此组件还支持使用 ApiProblemRenderer
的 crell/ApiProblem 对象。
$problem = new Crell\ApiProblem("Something unexpected happened"); $renderer = new RKA\ContentTypeRenderer\ApiProblemRenderer(); $response = $renderer->render($request, $response, $problem); return $response->withStatus(500);
对象数组
如果您有一个对象数组,只要这些对象实现了PHP的JsonSerializable接口,渲染器仍然可以正常工作。
测试
- 代码风格:
$ phpcs
- 单元测试:
$ phpunit
- 代码覆盖率:
$ phpunit --coverage-html ./build