ttskch / pagination-service-provider
用于Silex微框架的分页服务提供者。
Requires
- php: >=5.5.9
- cakephp/utility: ~3.0
- knplabs/knp-paginator-bundle: ~2.5
- silex/silex: ~2.0
- symfony/translation: ~2.8|~3.0
- symfony/twig-bridge: ~2.8|~3.0
- twig/twig: ~1.27|~2.0
Requires (Dev)
- doctrine/dbal: ~2.2
- fortawesome/font-awesome: 4.0.*@dev
- phpunit/phpunit: ~4.0
- twbs/bootstrap: 3.2.*@dev
This package is not auto-updated.
Last update: 2024-09-14 19:36:39 UTC
README
此服务提供者允许您在Silex应用程序中使用KnpPaginatorBundle。
要求
- 3.x: PHP 5.5.9+
- 1.x: PHP 5.3+
入门指南
对于Silex 2.x
$ composer require ttskch/pagination-service-provider
对于Silex 1.x
$ composer require ttskch/pagination-service-provider:~1.0
并在您的应用程序中启用此服务提供者
$app->register(new Ttskch\Silex\Provider\PaginationServiceProvider());
如果需要,您可以按照以下方式配置默认查询参数名称和模板(几乎与原始相同)
$app['knp_paginator.options'] = array( 'default_options' => array( 'sort_field_name' => 'sort', 'sort_direction_name' => 'direction', 'filter_field_name' => 'filterField', 'filter_value_name' => 'filterValue', 'page_name' => 'page', 'distinct' => true, ), 'template' => array( 'pagination' => '@knp_paginator_bundle/sliding.html.twig', 'filtration' => '@knp_paginator_bundle/filtration.html.twig', 'sortable' => '@knp_paginator_bundle/sortable_link.html.twig', ), 'page_range' => 5, );
然后您就可以创建分页实例并在视图中渲染它
// in your controller. $pagination = $app['knp_paginator']->paginate($someData); return $app['twig']->render('index.html.twig', array( 'pagination' => $pagination, ));
{# in your twig template #} {{ knp_pagination_render(pagination) }}
用法
KnpPaginatorBundle可以分页许多内容。但在Silex应用程序中我们可能用于
- 数组
- Doctrine\DBALQueryBuilder
然而,KnpPaginatorBundle不会自动通过请求查询参数对数据进行排序或过滤。如果您想要对这些数据进行排序或过滤,您应该手动进行。
排序或过滤数组
当您想要对简单的二维数组进行排序或过滤时,您可以像下面这样使用Cake\Utility\Hash(自动加载)
// in your controller. $array = /* some two dimensional array */; $sort = $request->get('sort'); $direction = $request->get('direction', 'asc'); $filterField = $request->get('filterField'); $filterValue = $request->get('filterValue'); $array = Hash::extract($array, "{n}[{$filterField}=/{$filterValue}/]"); $array = Hash::sort($array, "{n}.{$sort}", $direction); $pagination = $app['knp_paginator']->paginate($array); // You can get filtered and sorted pagination object.
有关使用Hash类的更多信息,请参阅官方文档。
排序或过滤Doctrine\DBALQueryBuilder
当您使用Doctrine\DBALQueryBuilder时,您可以通过以下SQL子句进行排序或过滤
// in your controller. $sort = $request->get('sort'); $direction = $request->get('direction', 'asc') === 'asc' ? 'asc' : 'desc'; $filterField = $request->get('filterField'); $filterValue = $request->get('filterValue'); $qb = $app['db']->createQueryBuilder() ->select('t.*') ->from('table', 't') ->where("{$app['db']->quoteIdentifier($filterField)} like {$app['db']->quote('%' . $filterValue . '%')}") ->orderBy($app['db']->quoteIdentifier($sort), $direction) ; $pagination = $app['knp_paginator']->paginate($qb);
演示
您可以在此处查看演示代码。您也可以通过以下命令在本地轻松运行演示。
$ git clone [email protected]:ttskch/PaginationServiceProvider.git $ cd PaginationServiceProvider $ composer install $ composer demo
现在您可以在http://localhost:8888上看到如下所示的演示。
附加功能
此服务提供者还提供基于bootstrap3的美丽分页和过滤模板。您可以使用它如下
$app['knp_paginator.options'] = array( 'template' => array( 'pagination' => '@ttskch_silex_pagination/pagination-bootstrap3.html.twig', 'filtration' => '@ttskch_silex_pagination/filtration-bootstrap3.html.twig', ), );
当您使用pagination-bootstrap3.html.twig
模板时,您可以配置每页项目数
选择器的列表。
$app['knp_paginator.limits'] = array(10, 25, 50, 100, 200, 500),
您还可以在messages
域中定义一些标签的翻译。
$app['translator.domains'] = array( 'messages' => array( 'ja' => array( 'Previous' => '前へ', 'Next' => '次へ', ), ), );
$app['translator.domains'] = array( 'messages' => array( 'ja' => array( 'Items per page' => '1ページの件数', 'Filter' => '絞り込み', ), ), );
注意
此服务提供者依赖于TwigServiceProvider
和TranslationServiceProvider
。请在注册PaginationServiceProvider
之前注册它们。