I have a problem with excluding some Paginator KNP properties using JMS Serializer.
Firstly, it is included in composer.json
... "jms/serializer-bundle": "~0.13", "knplabs/knp-paginator-bundle": "2.4.*@dev", ...
I paginate the CrmContacts policy and the exclusion policy for this object. I also added a yml file for KNP Paginator as follows:
config.yml
jms_serializer: metadata: directories: KNPPB: namespace_prefix: 'Knp\\Bundle\\PaginatorBundle' path: %kernel.root_dir%/Resources/serializer/Knp
inside the application / Resources / Serializer / Knp folder I created Pagination.SlidingPagination.yml:
Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination: exclusion_policy: ALL properties: items: expose: true access_type: public_method accessor: getter: getItems type: array serialized_name: payload currentPageNumber: expose: true serialized_name: page numItemsPerPage: expose: true serialized_name: items totalCount: expose: true serialized_name: totalItems
and this is the logic for returning serialized data:
public function getContactsAction(Request $request) { $limit = $request->query->getInt('l', 10); $page = $request->query->getInt('p', 1); $serializer = $this->get('jms_serializer'); $contacts = $this->getDoctrine() ->getManager() ->getRepository('AcmeContactsBundle:CrmContact') ->getContacts(); $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate( $contacts, $page, $limit ); return new Response( $serializer->serialize( $pagination, 'json', SerializationContext::create()->setGroups(['Default']) ), Response::HTTP_OK, [ 'Content-Type' => 'application/json', ] ); }
Unfortunately, I get all the properties from Knp Paginator in response:
{ "currentPageNumber": 1, "numItemsPerPage": 10, "items": [ { "id": 1, ... }, { "id": 2, ... }, { "id": 3, ... } ], "totalCount": 3, "paginatorOptions": { "pageParameterName": "page", "sortFieldParameterName": "sort", "sortDirectionParameterName": "direction", "filterFieldParameterName": "filterField", "filterValueParameterName": "filterValue", "distinct": true }, "customParameters": [], "route": "acmeContactsGetContacts", "params": [], "pageRange": 5, "template": "KnpPaginatorBundle:Pagination:sliding.html.twig", "sortableTemplate": "KnpPaginatorBundle:Pagination:sortable_link.html.twig", "filtrationTemplate": "KnpPaginatorBundle:Pagination:filtration.html.twig" }