qckanemoto/pagination-service-provider

此包已被废弃,不再维护。作者建议使用ttskch/pagination-service-provider包。

Silex微框架的分页服务提供者。

4.0.1 2018-06-28 08:56 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:39:26 UTC


README

Build Status Latest Stable Version Total Downloads

此服务提供者允许您在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 git@github.com:ttskch/PaginationServiceProvider.git
$ cd PaginationServiceProvider
$ composer install
$ composer demo

现在您可以在http://localhost:8888上看到以下演示。

image

附加功能

此服务提供者还提供基于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' => '絞り込み',
        ),
    ),
);

注意

此服务提供商依赖于 TwigServiceProviderTranslationServiceProvider。请在注册 PaginationServiceProvider 之前将它们注册。