2014-11-30 28 views
7

Bazı KNP Paginator özelliklerinin JMS Serializer ile hariç tutulmasıyla ilgili bir sorunum var.JMS Serializer, Knp Paginator için eşlemeleri yok sayar

Birincisi, bu composer.json

... 
"jms/serializer-bundle": "~0.13", 
"knplabs/knp-paginator-bundle": "2.4.*@dev", 
... 

o varlık iyi çalışıyor ben CrmContacts varlık ve dışlama politikasını Sayfalara ayırma ediyorum dahildir. Ben Pagination.SlidingPagination.yml oluşturduk uygulama/Kaynaklar/seri hale/knp klasörünün içindeki

config.yml

jms_serializer: 
    metadata: 
     directories: 
      KNPPB: 
       namespace_prefix: 'Knp\\Bundle\\PaginatorBundle' 
       path: %kernel.root_dir%/Resources/serializer/Knp 

:

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 
Ben de böyle KNP paginator için yml dosyası eklendi

ve bu tefrika veri döndürmek için mantıktır: Maalesef

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', 
     ] 
    ); 

} 

, bütün pr alıyorum cevaben knp paginator gelen zellikler:

{ 
    "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" 
} 

cevap

16

Eğer knp \ Component \ Çağrı \ sayfalandırmayı \ AbstractPagination aittir eşleştirmek istiyoruz özellikleri.

Ayrıca, özelliklerin geri kalanını da gizlemek istiyorsunuz, böylece her iki sınıfı da yapılandırmanız gerekecek.

Sadece aşağıdakileri denedim ve bu benim için çalışıyor.


uygulama/yapılandırma/config.yml

jms_serializer: 
metadata: 
    directories: 
     KnpPaginatorBundle: 
      namespace_prefix: Knp\Bundle\PaginatorBundle 
      path: %kernel.root_dir%/config/serializer/KnpPaginatorBundle 
     KnpPager: 
      namespace_prefix: Knp\Component\Pager 
      path: %kernel.root_dir%/config/serializer/KnpPager 

uygulama/yapılandırma/seri hale/KnpPager/Pagination.AbstractPagination.yml

Knp\Component\Pager\Pagination\AbstractPagination: 
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 

uygulama/yapılandırma/seri hale/KnpPaginatorBundle/sayfalandırmayı .SilimleşmePajination.yml

Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination: 
exclusion_policy: ALL 

Testten önce önbelleği temizlemeyi unutmayın.

Bu yardımcı olur umarım.

3

yerine tüm sayfalandırma nesne seri hale nedeniyle, bu gibi sadece veri ve öğeleri seri hale getirilmeye açmaya:

$result = array(
    'data' => $pagination->getItems(), 
    'meta' => $pagination->getPaginationData()); 

return new Response(
    $serializer->serialize(
     $result, 
     'json', 
     SerializationContext::create()->setGroups(['Default']) 
    ), 
    Response::HTTP_OK, 
    ['Content-Type' => 'application/json',] 
);