Переопределить сущность PNinator KNP

В настоящее время я работаю с 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 ответ

Вы можете продолжить двумя способами:

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 - что-то вроде этого.

Надеюсь это поможет

Другие вопросы по тегам