4

Symfony 2.1 プロジェクトに KnpPaginatorBundle をインストールし、Paginator も構成しました。

ページネーションを使用すると、URL は次のようになります。

http://dev.localhost/app_dev.php/news/development?page=3

URL をこのようなものに変更することは可能ですか (または同様の - ? および = 文字なし)?

http://dev.localhost/app_dev.php/news/development/page/3
4

2 に答える 2

8

問題を解決するには、次の手順に従ってください。

1) 新しいルートを作成するか、古いルートを変更して、routing.yml に以下を追加します。

news_development_route:
    pattern: /news/development/{page}
    defaults: {_controller: AcmeMainBundle:Article:list, page: 1 }

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));
}

それでおしまい

于 2014-11-25T10:02:15.367 に答える
2

コントローラーで、これを変更する必要があります。

/**
 * @Route("/list/", name="_user_list")
 * @Template()
 */
public function listAction()
{
    $em = $this->get('doctrine.orm.entity_manager');
    $dql = "SELECT a FROM HPPTarjetaBundle:User a";
    $query = $em->createQuery($dql);

    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $query,
        $this->get('request')->query->get('page', 1)/*page number*/,
        10/*limit per page*/
    );
    return compact('pagination');
}

...これに(「ページ」パラメータを参照):

/**
 * @Route("/list/{page}", name="_user_list")
 * @Template()
 */
public function listAction($page)
{
    $em = $this->get('doctrine.orm.entity_manager');
    $dql = "SELECT a FROM HPPTarjetaBundle:User a";
    $query = $em->createQuery($dql);

    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $query,
        $page/*page number*/,
        10/*limit per page*/
    );
    return compact('pagination');
}
于 2012-12-13T22:51:32.413 に答える