

symfony2で、ページングにKnpPaginatorBundleを使いたいのですが、  
検索結果などの一覧で、検索条件をページングに含めたい場合の記述方法が分かりません。

/blog/2016/02

というURLでアクセスしたアクションで  
2016はyear、02はmonthという名前で取得できている場合に、  
2ページ目にyear=2016&month=02というクエリを追加したいのですが、  
記述方法を教えてください。

$paginator = $this->get('knp_paginator');  
$posts = $paginator->paginate($query, $page, 3);

ここにどうにかして追加するのではと思うのですが  
書き方が見つかりませんでした。。

よろしくお願いします。


CC BY-SA 3.0
2016-03-10T12:09:16.253
22989
2016-12-04T06:22:55.983
14234
question
symfony2
KnpPaginatorBundleで、page以外の引数を追加する方法


自己解決したので記述します。  
どうやらknp_paginator自体にパラメーターを渡す機能はなさそうでした。  
アクションで以下のように実装し、

[code]

    $param = array('year' => $year, 'month' => $month);
    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate($query, $page, 3);
    return $this->render('Notice/index.html.twig', array('pagination' => $pagination, 'param' => $param));
    
[/code]

テンプレには

[code]

    {% if pagination.totalItemCount > 0 %}
    {% include "Common/pager.twig" with { 'pages' : pagination.paginationData, 'param': param, 'route' => 'notice_index' } %}
    {% endif %}
    
[/code]

pager.twigの中身は

[code]

    {% if pages.previous is defined %}
    <li><a href="{{ path(routes, param|merge({'page': pages.previous})) }}" aria-label="Previous"><span aria-hidden="true">前へ</span></a></li>
    {% endif %}
    
    {% for page in pages.pagesInRange %}
    <li{% if page == pages.current %} class="active"{% endif %}><a href="{{ path(routes, param|merge({'page': page})) }}"><span>{{ page }}</span></a></li>
    {% endfor %}
    
    {% if pages.next is defined %}
    <li><a href="{{ path(routes, param|merge({'page': pages.next})) }}" aria-label="Next"><span aria-hidden="true">次へ</span></a></li>
    {% endif %}
    
[/code]

こんな感じで実装して動きました。


CC BY-SA 3.0
2016-03-17T12:36:21.617
23226
2016-03-17T12:36:21.617
14234
22989
answer