gpt4 book ai didi

jmsserializerbundle - JMS 序列化程序忽略 Knp 分页器的映射

转载 作者:行者123 更新时间:2023-12-04 02:52:15 27 4
gpt4 key购买 nike

我在使用 JMS Serializer 排除某些 KNP Paginator 属性时遇到问题。

首先,这包含在 composer.json 中

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

我正在为 CrmContacts 实体分页,该实体的排除策略运行良好。我还为 KNP 分页器添加了 yml 文件,如下所示:

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

在 app/Resources/serializer/Knp 文件夹中,我创建了 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

这是返回序列化数据的逻辑:
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',
]
);

}

不幸的是,作为回应,我从 Knp Paginator 获取所有属性:
{
"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"
}

最佳答案

您要映射的属性归 Knp\Component\Pager\Pagination\AbstractPagination 所有。

您还想隐藏其余的属性,因此您必须配置这两个类。

我刚刚尝试了以下方法,它对我有用。

应用程序/配置/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

app/config/serializer/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

app/config/serializer/KnpPaginatorBundle/Pagination.SlidingPagination.yml
Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination:
exclusion_policy: ALL

不要忘记在测试前清除缓存。

希望这对你有帮助。

关于jmsserializerbundle - JMS 序列化程序忽略 Knp 分页器的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27214339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com