如何使用KnpPaginatorBundle的友好URL

rep*_*cln 4 url pagination symfony

我在Symfony 2.1项目中安装了KnpPaginatorBundle,并配置了Paginator.

通过分页我的URL看起来像:

http://dev.localhost/app_dev.php/news/development?page=3
Run Code Online (Sandbox Code Playgroud)

是否可以将URL更改为此类(或类似 - 没有?和=字符)?

http://dev.localhost/app_dev.php/news/development/page/3
Run Code Online (Sandbox Code Playgroud)

小智 8

我找到了解决方案,解决您的问题,请按照下列步骤操作:

1)创建一个新路由或更改旧路由,所以在routing.yml中添加:

news_development_route:
    pattern: /news/development/{page}
    defaults: {_controller: AcmeMainBundle:Article:list, page: 1 }
Run Code Online (Sandbox Code Playgroud)

2)在类控制器中,更改您的方法,如下所示:

// Acme\MainBundle\Controller\ArticleController.php

public function listAction($page)/*add the $page param*/
{
    $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,
        $this->get('request')->query->get('page', $page)/*change the number 1 by the $page parameter*/,
        10/*limit per page*/
    );
    $pagination->setUsedRoute('news_development_route'); /*define the pagination route*/

    // parameters to template
    return $this->render('AcmeMainBundle:Article:list.html.twig', array('pagination' => $pagination));
}
Run Code Online (Sandbox Code Playgroud)

而已