分类中的Zf2分页(路线问题)

时间:2014-07-29 16:57:23

标签: php pagination zend-framework2

我正在尝试在我的新闻模块中创建分页。

首先,我有这种模式:

  1. 所有新闻
  2. 按类别提供
  3. 我需要为这两种模式创建分页。我刚刚为所有新闻Feed创建了分页。没有问题。我有路由news +我添加了pagination路由作为子路由:

    'router' => array(
        'routes' => array(
            'news' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/news',
                    'defaults' => array(
                        'controller' => 'News\Controller\Item',
                        'action'     => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'pagination' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/page-:page',
                            'constraints' => array(
                                'page'     => '[1-9][0-9]*',
                            ),
                            'defaults' => array(
                                'page'      => 1,
                            )
                        ),
                        'may_terminate' => true,
                    ),
                    // more child routes
                ),
            ),
        ),
    ),
    

    我正在使用像这样的paginationControl:

    <?=$this->paginationControl(
        $this->news,
        'Sliding',
        'pagination_control',
        array('route' => 'news/pagination')
    )?>
    

    所有新闻Feed的分页都已完成。

    另外,我需要按类别为Feed添加分页。我有问题。我已在路线category中拥有子路线news。我将子路线pagination添加到news/category。配置变得如此:

    'router' => array(
        'routes' => array(
            'news' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/news',
                    'defaults' => array(
                        'controller' => 'News\Controller\Item',
                        'action'     => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'pagination' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/page-:page',
                            'constraints' => array(
                                'page'     => '[1-9][0-9]*',
                            ),
                            'defaults' => array(
                                'page'      => 1,
                            )
                        ),
                        'may_terminate' => true,
                    ),
                    'category' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/:category',
                            'constraints' => array(
                                'category'     => '[a-z]+',
                            ),
                            'defaults' => array(
                                'controller' => 'News\Controller\Item',
                                'action'     => 'category',
                            )
                        ),
                        'may_terminate' => true,
                        'child_routes' => array(
                            'pagination' => array(
                                'type' => 'Segment',
                                'options' => array(
                                    'route' => '/page-:page',
                                    'constraints' => array(
                                        'category'     => '[a-z]+',
                                        'page'     => '[1-9][0-9]*',
                                    ),
                                    'defaults' => array(
                                        'page'      => 1,
                                    )
                                ),
                                'may_terminate' => true,
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    

    确定。现在我像这样使用paginationControl:

    <?=$this->paginationControl(
        $this->news,
        'Sliding',
        'pagination_control',
        array('route' => 'news/category/pagination', array('category' => $this->category->getUrl()))
    )?>
    

    现在,当我尝试使用分页控件访问任何页面时,出现Missing parameter "category"错误。

    可能,我理解为什么会出现此错误:我指定路由news/category/pagination并指定此路线category的参数,但路线category中没有参数news/category/pagination,路线news/category中有这样的参数,但我没有指定它 - 它错了。我的假设是对的吗?

    那么,我如何使分页与分类一起使用?

    非常感谢!

1 个答案:

答案 0 :(得分:3)

最简单的方法就是将两条路线合并为一条。

           'category-page' => array(
                'type' => 'Segment',
                'options' => array(
                    'route' => '/:category/page-:page',
                    'constraints' => array(
                        'category'     => '[a-z]+',
                        'page'     => '[1-9][0-9]*'
                    ),
                    'defaults' => array(
                        'controller' => 'News\Controller\Item',
                        'action'     => 'category',
                        'page'      => 1
                    )
                ),
                'may_terminate' => true,
            ),

应该工作。

你也可以制作&#34; page&#34;可选:

'route' => '/:category[/page-:page]',

这是最简单的方法。