В настоящее время я работаю с KNP Paginator, чтобы разбить результаты на страницы.
Я получаю сериализованный объект paginator и получаю ответ в следующем виде:
"current_page_number": 1
"num_items_per_page": 5
"items": [5]
"total_count": 35
"paginator_options": {
"pageParameterName": "page""sortFieldParameterName": "sort""sortDirectionParameterName": "direction""filterFieldParameterName": "filterField""filterValueParameterName": "filterValue""distinct": true
}-
"custom_parameters": [0]
"route": "api_tags_list""params": [0]
"page_range": 5
"template": "KnpPaginatorBundle:Pagination:sliding.html.twig""sortable_template":
"KnpPaginatorBundle:Pagination:sortable_link.html.twig""filtration_template":
"KnpPaginatorBundle:Pagination:filtration.html.twig"
Можно ли переопределить сущность пагинатора KNP, чтобы ответ не включал templates
но включены total number of pages
?
Желаемый результат:
"current_page_number": 1
"num_items_per_page": 5
"items": [5]
"total_count": 35
"paginator_options": {
"pageParameterName": "page""sortFieldParameterName": "sort""sortDirectionParameterName": "direction""filterFieldParameterName": "filterField""filterValueParameterName": "filterValue""distinct": true
}-
"custom_parameters": [0]
"route": "api_tags_list""params": [0]
"page_range": 5
"total_page_number": 7
Вы можете продолжить двумя способами:
1) Определите сериализацию пагинатора KNP, определяя, что вы хотите отобразить, как описано Вот (Вы также можете определить предыдущий / следующий маршрут с подписчиком jms или с пакетом banzigahatoas). Результат в контроллере будет:
$paginator = $this->get('knp_paginator');
$data =
$paginator->paginate(
$query, /* query NOT result */
2 /*page number*/,
2/*limit per page*/
);
return $data;
2) Или обработать вручную результат следующим образом:
$paginator = $this->get('knp_paginator');
$data =
$paginator->paginate(
$query, /* query NOT result */
2 /*page number*/,
2/*limit per page*/
);
return [
'items' => $data->getItems(),
'pagination' => $this->paginationToArray($data)
];
Где метод paginatorToArray является чем-то вроде этот.
Надеюсь это поможет
Других решений пока нет …