From fb56997ea47aaf5316db06983c883e398edf65cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jari=20Sch=C3=A4fer?= Date: Wed, 19 Apr 2017 21:30:05 +0200 Subject: [PATCH] routes: allow including searchable fields --- .../HalApi/Helpers/ResourceRoute.php | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Jarischaefer/HalApi/Helpers/ResourceRoute.php b/src/Jarischaefer/HalApi/Helpers/ResourceRoute.php index e666348..f54825a 100644 --- a/src/Jarischaefer/HalApi/Helpers/ResourceRoute.php +++ b/src/Jarischaefer/HalApi/Helpers/ResourceRoute.php @@ -1,4 +1,6 @@ -routeHelper ->get($this->name . '/search', $this->controller, 'search') ->get($this->name . '/search?' . self::PAGINATION_QUERY_STRING, $this->controller, 'search'); + $searchableQueryString = $this->createSearchableQueryString($searchableFields); + + if (!empty($searchableQueryString)) { + $uri = $this->name . '/search?' . self::PAGINATION_QUERY_STRING . '&' . $searchableQueryString; + $this->routeHelper->get($uri, $this->controller, 'search'); + } + return $this; } + /** + * @param iterable $searchableFields + * @return string + */ + private function createSearchableQueryString(iterable $searchableFields = null): string + { + if ($searchableFields === null) { + return ''; + } + + $string = ''; + $delimiter = ''; + + foreach ($searchableFields as $field) { + $string .= $delimiter . $field . '={' . $field . '}'; + $delimiter = '&'; + } + + return $string; + } + /** * Call this method once you're done registering additional routes to the current resource. * The original RouteHelper instance is returned, allowing infinite chaining of ordinary routes and resources.