tmsolution / knp-paginator-bundle
Symfony2的分页组件,用于自动化分页以及简化排序和其他功能
Requires
- php: >=5.3.3
- knplabs/knp-components: ~1.2
- symfony/framework-bundle: ~2.7|~3.0
- twig/twig: ~1.12|~2
Requires (Dev)
- phpunit/phpunit: ~4.8
- symfony/expression-language: ~2.7|~3.0
README
SEO友好的Symfony2分页组件,可分页一切内容
通常,此组件基于Knp Pager组件。该组件引入了一种不同的分页处理方式。您可以阅读更多关于内部逻辑的文档链接。
注意:请确保与这个组件同步使用knp-components。如果您想使用KnpPaginatorBundle的旧版本 - 使用仓库中的v1.0标签,它适合分页ODM mongodb和ORM 2.0查询。
最新更新
有关最新更改的说明,请阅读CHANGELOG
,有关代码中所需更改的说明,请阅读文档中的UPGRADE
章节。
要求
- Knp分页组件
>=1.1
- KnpPaginatorBundle的master与symfony(
>=2.0
版本)兼容。 - 如果使用twig模板引擎,则需要Twig
>=1.5
版本。
特性
- 无需初始化特定的适配器
- 可以根据需要自定义,例如:分页视图、事件订阅者。
- 根据请求参数添加自定义过滤和排序功能。
- 关注点分离,分页器只负责生成分页视图,分页视图 - 用于表示。
注意:使用多个分页器需要设置别名以保持参数不冲突。此外,在使用twig模板时,由于哈希数组不能使用变量作为键,因此会变得相当复杂。
更详细的文档
安装和配置
使用Composer非常简单,运行
composer require knplabs/knp-paginator-bundle
将PaginatorBundle添加到您的应用程序内核
// app/AppKernel.php public function registerBundles() { return array( // ... new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(), // ... ); }
配置示例
您可以配置默认的查询参数名称和模板
knp_paginator: page_range: 5 # default page range used in pagination control default_options: page_name: page # page query parameter name sort_field_name: sort # sort field query parameter name sort_direction_name: direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements template: pagination: 'KnpPaginatorBundle:Pagination:sliding.html.twig' # sliding pagination controls template sortable: 'KnpPaginatorBundle:Pagination:sortable_link.html.twig' # sort link template
有一些额外的分页模板,可以在knp_paginator.template.pagination
键中直接使用
KnpPaginatorBundle:Pagination:sliding.html.twig
(默认)KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig
KnpPaginatorBundle:Pagination:twitter_bootstrap_pagination.html.twig
KnpPaginatorBundle:Pagination:foundation_v5_pagination.html.twig
使用示例
控制器
当前分页器可以分页
数组
Doctrine\ORM\Query
Doctrine\ORM\QueryBuilder
Doctrine\ODM\MongoDB\Query\Query
Doctrine\ODM\MongoDB\Query\Builder
Doctrine\ODM\PHPCR\Query\Query
Doctrine\ODM\PHPCR\Query\Builder\QueryBuilder
Doctrine\Common\Collection\ArrayCollection
- 包括任何 doctrine关系集合ModelCriteria
- Propel ORM查询- 包含
Solarium_Client
和Solarium_Query_Select
的数组
// Acme\MainBundle\Controller\ArticleController.php public function listAction(Request $request) { $em = $this->get('doctrine.orm.entity_manager'); $dql = "SELECT a FROM AcmeMainBundle:Article a"; $query = $em->createQuery($dql); $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate( $query, /* query NOT result */ $request->query->getInt('page', 1)/*page number*/, 10/*limit per page*/ ); // parameters to template return $this->render('AcmeMainBundle:Article:list.html.twig', array('pagination' => $pagination)); }
视图
{# total items count #} <div class="count"> {{ pagination.getTotalItemCount }} </div> <table> <tr> {# sorting of properties based on query components #} <th>{{ knp_pagination_sortable(pagination, 'Id', 'a.id') }}</th> <th{% if pagination.isSorted('a.Title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Title', 'a.title') }}</th> <th>{{ knp_pagination_sortable(pagination, 'Release', ['a.date', 'a.time']) }}</th> </tr> {# table body #} {% for article in pagination %} <tr {% if loop.index is odd %}class="color"{% endif %}> <td>{{ article.id }}</td> <td>{{ article.title }}</td> <td>{{ article.date | date('Y-m-d') }}, {{ article.time | date('H:i:s') }}</td> </tr> {% endfor %} </table> {# display navigation #} <div class="navigation"> {{ knp_pagination_render(pagination) }} </div>
视图中的翻译
要翻译以下文本
%foo% 名称
与翻译键table_header_name
相关。翻译位于域messages
。{0} 无作者|{1} 作者|[2,Inf] 作者
与翻译键table_header_author
相关。翻译位于域messages
。
translationCount 和 translationParameters 可以组合使用。
<table> <tr> {# sorting of properties based on query components #} <th>{{ knp_pagination_sortable(pagination, 'Id'|trans({foo:'bar'},'messages'), 'a.id' )|raw }}</th> <th{% if pagination.isSorted('a.Title') %} class="sorted"{% endif %}>{{ knp_pagination_sortable(pagination, 'Title', 'a.title')|raw }}</th> <th>{{ knp_pagination_sortable(pagination, 'Author'|trans({}, 'messages'), 'a.author' )|raw }}</th> </tr> <!-- Content of the table --> </table>
依赖注入
您可以使用 knp_paginator.injectable
DIC 标签自动将分页器服务注入到另一个服务中。该标签接受一个可选参数 paginator
,这是要注入的分页器服务的 ID。默认为 knp_paginator
。
接收 KnpPaginator 服务的类必须实现 Knp\Bundle\PaginatorBundle\Definition\PaginatorAwareInterface
接口。如果您很懒惰,也可以直接扩展 Knp\Bundle\PaginatorBundle\Definition\PaginatorAware
基类。
XML 配置示例
<?xml version="1.0" ?> <container xmlns="https://symfony.com.cn/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://symfony.com.cn/schema/dic/services https://symfony.com.cn/schema/dic/services/services-1.0.xsd"> <parameters> <parameter key="my_bundle.paginator_aware.class">MyBundle\Repository\PaginatorAwareRepository</parameter> </parameters> <services> <service id="my_bundle.paginator_aware" class="my_bundle.paginator_aware.class"> <tag name="knp_paginator.injectable" paginator="knp_paginator" /> </service> </services> </container>