Render an array(or HAL object) to a JSON/XML/HTML PSR-7 Response based on a PSR-7 Request's Accept header.
PHP
Latest commit c16aad9 Jan 28, 2017 @akrabat Look for specific media types first
For HAL and API Problem, if the specific media type is in the Accept
header then use is. Otherwise, find preferred format.

README.md

Render output based on content-type

Render an array (or HAL object) to a JSON/XML/HTML PSR-7 Response based on a PSR-7 Request's Accept header.

Build status

Installation

composer require akrabat/rka-content-type-renderer

Usage

// 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);

HalRenderer

This component also supports nocarrier/hal objects with the HalRenderer:

$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

This component also supports crell/ApiProblem objects with the ApiProblemRenderer:

$problem = new Crell\ApiProblem("Something unexpected happened");
$renderer = new RKA\ContentTypeRenderer\ApiProblemRenderer();
$response  = $renderer->render($request, $response, $problem);
return $response->withStatus(500);

Arrays of objects

If you have an array of objects, then the renderer will still work as long as the objects implement PHP's JsonSerializable interface.

Testing

  • Code style: $ phpcs
  • Unit tests: $ phpunit
  • Code coverage: $ phpunit --coverage-html ./build