/** * Returns a paginated result * * @param Parameters $params * @return PayloadInterface */ public function paginate(Parameters $params) { $sysPrefs = $this->getServiceContainer()->getPreferenceLoader()->getSystemPreferences(); $defaultSize = $sysPrefs->getPaginationSize(); $page = $params->getPage('number'); $size = $params->getPage('size', $defaultSize); $query = LanguageQuery::create(); // sorting $sort = $params->getSort(Language::getSerializer()->getSortFields()); foreach ($sort as $field => $order) { $method = 'orderBy' . NameUtils::toStudlyCase($field); $query->{$method}($order); } // filtering $filter = $params->getFilter(); if (!empty($filter)) { $this->applyFilter($query, $filter); } // paginate if ($size == -1) { $model = $query->findAll(); } else { $model = $query->paginate($page, $size); } // run response return new Found(['model' => $model]); }