chg: [crud:index] Added better support of pagination for API
parent
72932c582d
commit
fce564f798
|
@ -46,7 +46,8 @@ class CRUDComponent extends Component
|
||||||
$options['filters'][] = 'filteringTags';
|
$options['filters'][] = 'filteringTags';
|
||||||
}
|
}
|
||||||
|
|
||||||
$optionFilters = empty($options['filters']) ? [] : $options['filters'];
|
$optionFilters = [];
|
||||||
|
$optionFilters += empty($options['filters']) ? [] : $options['filters'];
|
||||||
foreach ($optionFilters as $i => $filter) {
|
foreach ($optionFilters as $i => $filter) {
|
||||||
$optionFilters[] = "{$filter} !=";
|
$optionFilters[] = "{$filter} !=";
|
||||||
$optionFilters[] = "{$filter} >=";
|
$optionFilters[] = "{$filter} >=";
|
||||||
|
@ -79,7 +80,13 @@ class CRUDComponent extends Component
|
||||||
if ($this->metaFieldsSupported()) {
|
if ($this->metaFieldsSupported()) {
|
||||||
$query = $this->includeRequestedMetaFields($query);
|
$query = $this->includeRequestedMetaFields($query);
|
||||||
}
|
}
|
||||||
$data = $query->all();
|
if (!$this->Controller->ParamHandler->isRest()) {
|
||||||
|
$this->setRequestedEntryAmount();
|
||||||
|
}
|
||||||
|
$data = $this->Controller->paginate($query, $this->Controller->paginate ?? []);
|
||||||
|
$totalCount = $this->Controller->getRequest()->getAttribute('paging')[$this->TableAlias]['count'];
|
||||||
|
if ($this->Controller->ParamHandler->isRest()) {
|
||||||
|
$data = $this->Controller->paginate($query, $this->Controller->paginate ?? []);
|
||||||
if (isset($options['hidden'])) {
|
if (isset($options['hidden'])) {
|
||||||
$data->each(function($value, $key) use ($options) {
|
$data->each(function($value, $key) use ($options) {
|
||||||
$hidden = is_array($options['hidden']) ? $options['hidden'] : [$options['hidden']];
|
$hidden = is_array($options['hidden']) ? $options['hidden'] : [$options['hidden']];
|
||||||
|
@ -110,13 +117,11 @@ class CRUDComponent extends Component
|
||||||
return $this->attachMetaTemplatesIfNeeded($value, $metaTemplates);
|
return $this->attachMetaTemplatesIfNeeded($value, $metaTemplates);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
$this->Controller->restResponsePayload = $this->RestResponse->viewData($data, 'json');
|
$this->Controller->restResponsePayload = $this->RestResponse->viewData($data, 'json', false, false, false, [
|
||||||
|
'X-Total-Count' => $totalCount,
|
||||||
|
]);
|
||||||
} else {
|
} else {
|
||||||
if ($this->metaFieldsSupported()) {
|
$this->Controller->setResponse($this->Controller->getResponse()->withHeader('X-Total-Count', $totalCount));
|
||||||
$query = $this->includeRequestedMetaFields($query);
|
|
||||||
}
|
|
||||||
$this->setRequestedEntryAmount();
|
|
||||||
$data = $this->Controller->paginate($query, $this->Controller->paginate ?? []);
|
|
||||||
if (isset($options['afterFind'])) {
|
if (isset($options['afterFind'])) {
|
||||||
$function = $options['afterFind'];
|
$function = $options['afterFind'];
|
||||||
if (is_callable($function)) {
|
if (is_callable($function)) {
|
||||||
|
|
Loading…
Reference in New Issue