diff --git a/Action/ListAction.php b/Action/ListAction.php index 1546af8..d8c0144 100644 --- a/Action/ListAction.php +++ b/Action/ListAction.php @@ -27,7 +27,7 @@ class ListAction extends EntityAction */ public function executeAction(Request $request) { - $filters = $this->getFilters($request); + $filters = $this->getFilters($request->query->all()); $page = $this->extractParam($filters, 'page', 1); $perPage = $this->extractParam($filters, 'per-page', $this->options['default_per_page']); @@ -70,22 +70,33 @@ public function executeAction(Request $request) } /** - * @param Request $request - * + * @param array $queryFilters + * @param null|string $parentFilter * @return array + * */ - protected function getFilters(Request $request) + protected function getFilters(array $queryFilters, ?string $parentFilter = null) { - $filters = []; - $unknownParams = []; + static $filters = []; + static $unknownParams = []; + + foreach ($queryFilters as $key => $value) { + + $filter = $parentFilter ? "{$parentFilter}.{$key}" : $key; - foreach ($request->query->all() as $key => $value) { - if (!array_key_exists($key, $this->options['filters'])) { - $unknownParams[] = '"'.$key.'"'; + if (is_array($value)) { + + $this->getFilters($value, $filter); continue; } - $filters[$key] = $this->processFilter($key, $value); + if (!array_key_exists($filter, $this->options['filters'])) { + $unknownParams[] = '"'.$filter.'"'; + continue; + } + + $filters[$filter] = $this->processFilter($filter, $value); + } if (count($unknownParams)) {