From b4e6fe7135b488a3e530e707855eb51bcdee5cce Mon Sep 17 00:00:00 2001 From: Alejandro Celaya <alejandro@alejandrocelaya.com> Date: Mon, 4 Jul 2016 12:50:06 +0200 Subject: [PATCH] Created trait to serialize paginators --- .../Rest/ListShortcodesMiddleware.php | 17 ++++++----------- .../Util/PaginatorSerializerTrait.php | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 src/Paginator/Util/PaginatorSerializerTrait.php diff --git a/src/Middleware/Rest/ListShortcodesMiddleware.php b/src/Middleware/Rest/ListShortcodesMiddleware.php index 5f3b92a0..6a4a627f 100644 --- a/src/Middleware/Rest/ListShortcodesMiddleware.php +++ b/src/Middleware/Rest/ListShortcodesMiddleware.php @@ -1,6 +1,7 @@ <?php namespace Acelaya\UrlShortener\Middleware\Rest; +use Acelaya\UrlShortener\Paginator\Util\PaginatorSerializerTrait; use Acelaya\UrlShortener\Service\ShortUrlService; use Acelaya\UrlShortener\Service\ShortUrlServiceInterface; use Acelaya\UrlShortener\Util\RestUtils; @@ -13,6 +14,8 @@ use Zend\Stratigility\MiddlewareInterface; class ListShortcodesMiddleware implements MiddlewareInterface { + use PaginatorSerializerTrait; + /** * @var ShortUrlServiceInterface */ @@ -57,17 +60,9 @@ class ListShortcodesMiddleware implements MiddlewareInterface public function __invoke(Request $request, Response $response, callable $out = null) { try { - $shortUrls = $this->shortUrlService->listShortUrls(); - - return new JsonResponse([ - 'shortUrls' => [ - 'data' => ArrayUtils::iteratorToArray($shortUrls->getCurrentItems()), - 'pagination' => [ - 'currentPage' => $shortUrls->getCurrentPageNumber(), - 'pagesCount' => $shortUrls->count(), - ], - ] - ]); + $query = $request->getQueryParams(); + $shortUrls = $this->shortUrlService->listShortUrls(isset($query['page']) ? $query['page'] : 1); + return new JsonResponse(['shortUrls' => $this->serializePaginator($shortUrls)]); } catch (\Exception $e) { return new JsonResponse([ 'error' => RestUtils::UNKNOWN_ERROR, diff --git a/src/Paginator/Util/PaginatorSerializerTrait.php b/src/Paginator/Util/PaginatorSerializerTrait.php new file mode 100644 index 00000000..573832ca --- /dev/null +++ b/src/Paginator/Util/PaginatorSerializerTrait.php @@ -0,0 +1,19 @@ +<?php +namespace Acelaya\UrlShortener\Paginator\Util; + +use Zend\Paginator\Paginator; +use Zend\Stdlib\ArrayUtils; + +trait PaginatorSerializerTrait +{ + protected function serializePaginator(Paginator $paginator) + { + return [ + 'data' => ArrayUtils::iteratorToArray($paginator->getCurrentItems()), + 'pagination' => [ + 'currentPage' => $paginator->getCurrentPageNumber(), + 'pagesCount' => $paginator->count(), + ], + ]; + } +}