Implement filter helpers for ajax table controllers (#9660)

Reduces boiler plate code.
This commit is contained in:
Tony Murray
2019-01-14 14:00:05 -06:00
committed by GitHub
parent 33c886247c
commit 394c40e541
4 changed files with 58 additions and 31 deletions

View File

@@ -65,7 +65,7 @@ abstract class PaginatedAjaxController extends Controller
}
/**
* Defines search fields will be searched in order
* Defines search fields. They will be searched in order.
*
* @param \Illuminate\Http\Request $request
* @return array
@@ -76,6 +76,18 @@ abstract class PaginatedAjaxController extends Controller
return [];
}
/**
* Defines filter fields. Request and table fields must match.
*
* @param \Illuminate\Http\Request $request
* @return array
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
protected function filterFields($request)
{
return [];
}
/**
* Format an item for display. Default is pass-through
*
@@ -88,7 +100,7 @@ abstract class PaginatedAjaxController extends Controller
}
/**
* @param string
* @param string $search
* @param Builder $query
* @param array $fields
* @return Builder
@@ -107,6 +119,23 @@ abstract class PaginatedAjaxController extends Controller
return $query;
}
/**
* @param Request $request
* @param Builder $query
* @param array $fields
*/
protected function filter($request, $query, $fields)
{
foreach ($fields as $target => $field) {
if ($value = $request->get($field)) {
if (is_string($target)) {
$query->where($target, $value);
} else {
$query->where($field, $value);
}
}
}
}
/**
* Validate the given request with the given rules.