JMS Serializer 忽略 Knp Paginator 的映射

2024-01-18

我在使用 JMS 序列化程序排除某些 KNP Paginator 属性时遇到问题。

首先,它包含在composer.json中

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

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

配置.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

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

应用程序/配置/序列化器/KnpPaginatorBundle/Pagination.SlidingPagination.yml

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

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

希望这对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JMS Serializer 忽略 Knp Paginator 的映射 的相关文章

随机推荐

  • 安装Nokogiri时GCC编译错误

    我正在尝试奔跑bundle install但我在尝试安装 Nokogiri 1 10 3 时遇到错误 这是来自的错误消息mkmf log gcc o conftest I home chille rvm rubies ruby 2 5 1
  • 在 C++ 中前向声明枚举

    我正在尝试做类似以下的事情 enum E void Foo E e enum E A B C 编译器拒绝的 我快速浏览了一下谷歌 共识似乎是 你做不到 这是为什么 说明 2 我这样做是因为我在一个类中有私有方法 该方法采用所述枚举 并且我不
  • 如何在 UITableView 顶部添加一个一起滚动的视图,但滚动后粘在顶部

    我有一个高度为 100 像素的 UIView 位于 UITableView 之上 当我向上滚动时 我希望 UIView 与 UITableView 一起滚动 就好像它是它的一部分一样 当我的 UIView 的 50 像素被隐藏而无法向上滚动
  • nvd3 折线图未正确显示。 (点和阴影区域)

    所以我使用 nvd3 我想在一张折线图中显示 2 条线 我知道代码没问题 因为我正在 nvd3 的实时代码上尝试它并且工作正常 我在很多地方读到 他们在 nvd3 live 代码上使用的代码与 api 不同 因此该图有阴影并且有点 然而 在
  • Kubernetes 和 JVM 内存设置

    In a Kubernetes具有众多微服务的集群 其中一个专门用于Java Virtual Machine JVM 运行Java 1 8数据处理应用程序 直到最近 该 JVM Pod 中运行的作业消耗的 RAM 还不到 1 GB 因此该
  • 加速 numpy 3D 数组的卷积循环?

    沿着 3d numpy 数组的 Z 向量执行卷积 然后对结果进行其他操作 但由于现在实现的原因 速度很慢 是 for 循环让我慢下来还是卷积 我尝试重塑为一维向量并在 1 遍中执行卷积 就像我在 Matlab 中所做的那样 而不使用 for
  • Git 远程分支已删除,但仍然出现在“branch -a”中

    假设我有一个名为coolbranch在我的存储库中 现在 我决定使用以下命令删除它 远程和本地 git push origin coolbranch git branch D coolbranch 伟大的 现在分支真的被删除了 但当我跑步时
  • 获取目录所有者信息

    我的脚本以递归方式获取目录信息 例如目录名称 LastAccessTime LastWriteTime 和大小 我想知道是否可以获取文件夹所有者名称 这是我的脚本 function Get DirSize param Parameter M
  • 渲染 razor 模板时自定义 WebViewPage 注入代码

    我正在尝试创建一个自定义 Razor 视图基类 继承WebViewPage 这将为每个正在渲染的视图模板 包括布局和部分视图 注入一些 HTML 以便我在客户端上有每个 Razor 模板开始位置的引用 对它结束的位置不感兴趣 到目前为止我尝
  • 使用惰性数据表时,另一个组件不会更新/第二个组件数据落后于一个请求

    我有一个 PrimeFacesp dataTable并通过实现启用延迟加载LazyDataModel dataTable 保存搜索结果 因此在执行搜索请求时 搜索服务仅检索所需的 分页 数据 效果很好 当使用 ajax 请求时p comma
  • Matter JS - 物理 - 如何定义重元素,难以被小元素移动

    我一直在努力研究 Matter JS 的物理原理 试图让它们正确 我有两个要素 Matter Bodies rectangle 400 400 113 66 frictionAir 1 friction 1 density 0 5 rest
  • SCons - 非标准位置的标头/库

    我正在尝试使用 SCons 编译一个程序 该程序需要一组我已安装在非标准位置的依赖项 我已将依赖项安装在 home dja ocr 中 现在我正在尝试编译主程序 但不知道如何告诉 SCons 在哪里查找库和标头 我已经尝试过 除其他外 sc
  • 使用 python 循环遍历文本文件列表

    编辑 为了更清楚起见 已更新帖子 但还没有答案有帮助 好吧 我的任务是获取一个文本文件 每行有 4 个条目 分别是名字 姓氏 小时数 工资率 我要做一些计算 并将所有这些信息放入 python 的格式化表中 现在 我已经有了将数据输入表中的
  • 语法高亮的正确正则表达式是什么?

    使用 NSRegularExpression 进行语法高亮的正确正则表达式是什么 必须通过以下测试 code comment code comment code code string code code comment code code
  • FlipView 控件在 Windows Phone 8 SDK 中不可用

    FlipView 控件在 Windows Phone 8 SDK 中不可用 实现类似功能的替代方法是什么 这里有几个选项 如果您只想显示固定数量的 页面 您可以使用Panorama http msdn microsoft com en us
  • 赛普拉斯抛出安全错误

    我目前正在使用 Chrome 74 运行 并尝试使用 Cypress 来测试我的应用程序中的样式指南 当我加载 Cypress 时 它会抛出此错误 安全错误 阻止了来源为 http localhost 3000 的框架 访问跨源框架 请告诉
  • 您为网站推荐哪种 PHP CMS? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在建立一个网站 需要使用 CMS 如果我使用已经制作好的 CMS 我需要能够轻松扩展它 您有推荐的特定 CMS 还是我应该自己制作一个 CM
  • Bootstrap:如何更改容器的宽度?

    我使用Twitter Bootstrap开发了一个具有固定容器类的网站 但现在客户希望网站宽度为1000px而不是1170px 我不使用 less 文件 有没有快速的方法来解决这个问题 这是解决方案 media min width 1200
  • 如何在一个文件中定义一个 C 函数,然后从另一个文件中调用它?

    如果我在文件中定义一个函数func1 c 我想从文件中调用它call c 我怎样才能完成这个任务 您可以在文件中放置该函数的声明func1 h 并添加 include func1 h in call c 然后你会编译或链接func1 c a
  • JMS Serializer 忽略 Knp Paginator 的映射

    我在使用 JMS 序列化程序排除某些 KNP Paginator 属性时遇到问题 首先 它包含在composer json中 jms serializer bundle 0 13 knplabs knp paginator bundle 2