From d4ea1f4d0ba327d416409fa080cd762b24ad6f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20H=C5=AFla?= Date: Fri, 25 May 2018 14:07:51 +0200 Subject: [PATCH] fix: pass only valid filter inputs to data source callback [Closes #73] --- src/Datagrid.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Datagrid.php b/src/Datagrid.php index 7deaa83..a45dde5 100644 --- a/src/Datagrid.php +++ b/src/Datagrid.php @@ -429,10 +429,21 @@ protected function getData($key = null) $this->orderColumn = NULL; } + $validFilterData = []; + if ($this->filterFormFactory) { + $this['form']->isValid(); // triggers validation + foreach ($this['form']['filters']->getControls() as $name => $control) { + if ($control->getErrors() === []) { + $validFilterData[$name] = $control->getValue(); + } + } + $validFilterData = $this->filterFormFilter($validFilterData); + } + if (!$onlyRow && $this->paginator) { $itemsCount = call_user_func( $this->paginatorItemsCountCallback, - $this->filterDataSource, + $validFilterData, $this->orderColumn ? [$this->orderColumn, strtoupper($this->orderType)] : null ); @@ -444,7 +455,7 @@ protected function getData($key = null) $this->data = call_user_func( $this->dataSourceCallback, - $this->filterDataSource, + $validFilterData, $this->orderColumn ? [$this->orderColumn, strtoupper($this->orderType)] : null, $onlyRow ? null : $this->paginator );