2012-05-07 11 views
1

KnpPaginator Bundleを使用して、2ページ分の結果セットを(2つのテーブルを表す)twigに渡すコントローラが1つあります。Symfony2 KnpPaginatorバンドルは、私のビューの2ページ目のテーブルでソートできない

両方のテーブルが表示され、改ページされていますが、それらのテーブルを並べ替えることはできません。 編集:表1のページを変更すると、表2のページもそのページ番号に変更されます。

これらのいずれかをソートしようとすると、指定されたクエリに[t]のエイリアスがありません。また、指定されたクエリに[r]でエイリアス化されたコンポーネントはありません。

コントローラ:

$em = $this->getDoctrine()->getEntityManager(); 
    $pageSize = $this->container->getParameter('page_size'); 
    $paginator = $this->get('knp_paginator'); 

    /* Queries */ 
    $queryTest = $em 
     ->createQuery(' 
      SELECT t FROM PanasonicTestEtAvisBundle:Test t 
      JOIN t.product p 
      WHERE p.id = :id 
      AND t.isDeleted = :isdeleted 
      ORDER BY t.creationDate DESC' 
     )->setParameter('id', $id) 
     ->setParameter('isdeleted', '0'); 

    $queryReview = $em 
     ->createQuery(' 
      SELECT r FROM PanasonicTestEtAvisBundle:Review r 
      JOIN r.product p 
      WHERE p.id = :id 
      AND r.isDeleted = :isdeleted 
      ORDER BY r.creationDate DESC' 
     )->setParameter('id', $id) 
     ->setParameter('isdeleted', '0'); 

    /* paginated results */ 
    $paginationTest = $paginator->paginate($queryTest, $this->get('request')->query->get('page', 1), $pageSize); 
//  compact('paginationTest'); 

    $paginationReview = $paginator->paginate($queryReview, $this->get('request')->query->get('page', 1), $pageSize); 
//  compact('paginationReview'); 
//  compact('pagination'); 

    return $this->render('PanasonicTestEtAvisBundle:Product:show.html.twig', array(
     'paginationTest' => $paginationTest, 
     'paginationReview' => $paginationReview 
    )); 

Iは、(paginationTest & paginationReview)両方の改ページを渡す場合にのみ、エラーは私は一つだけを通過させる場合、それは完璧に動作し、アップ示します。

誰でもこの問題を解決する方法を教えていただけますか?

答えて

2

ページ設定の両方に同じページ変数「ページ」を使用しているため、この例は機能しませんでした。

あなたが同じ場所に二つ以上の改ページのセットを使用したい場合は、この操作を行う必要があります。

あなたのコントローラー:

... 

$pagename1 = 'page1'; // Set custom page variable name 
$page1 = this->get('request')->query->get($pagename1, 1); // Get custom page variable 
$paginationReview = $paginator->paginate(
    $queryReview, 
    $page1, 
    $pageSize, 
    array('pageParameterName' => $pagename1) 
); 

$pagename2 = 'page2'; // Set another custom page variable name 
$page2 = this->get('request')->query->get($pagename2, 1); // Get another custom page variable 
$paginationReview = $paginator->paginate(
    $queryReview, 
    $page2, 
    $pageSize, 
    array('pageParameterName' => $pagename2) 
); 

return $this->render('PanasonicTestEtAvisBundle:Product:show.html.twig', array(
    'paginationTest' => $paginationTest, 
    'paginationReview' => $paginationReview 
)); 

あなたのビュー:

// PanasonicTestEtAvisBundle:Product:show.html.twig 
{# First set #} 
{% for test in paginationTest %} 
<tr> 
    <td>{{ test.id }}</td> 
</tr> 
{% endfor %} 
{{ paginationTest.render()|raw }} 

{# Second set #} 
{% for review in paginationReview %} 
<tr> 
    <td>{{ review.id }}</td> 
</tr> 
{% endfor %} 
{{ paginationReview.render()|raw }} 

お楽しみください!

+2

ありがとう、これで問題は解決します。 knp-componentファイル(Paginatior。php)私は 'sortFieldParameterName' => "sort1"、 "sortDirectionParameterName" => "direction1"を設定しなければならないことが判明しました。今うまく動作します:) – Rishi

+0

私はあなたの解決策をその問題について実行していますが、説明したようにすべてをやったにもかかわらず、@ Rishiと同じエラーメッセージが表示されます。 – sonja

+0

こんにちはSonja。私はこのバンドルをしばらく使っていませんが、下のTekMiの答えから推測すると、 'sortFieldParameterName'および/または 'sortDirectionParameterName'パラメータを設定する必要があります。 – Rishi

0

それは2017年で、私は同様の問題に陥った。ただ、参考のために、私が使用しています:

"knplabs/knp-paginator-bundle": "^2.5", 

私はsymfonyのクローラにはいくつかの機能テストを実行しようとしていました。それらのいくつかは、オプションでKNPページネータを使用していた。

[ 
    'defaultSortFieldName' => 'voucher.id', 
    'defaultSortDirection' => 'DESC', 
    'wrap-queries' => true, 
    'defaultFilterFields' => ['voucherText.title'] 
] 

ながら、それらのオプションを持つ他の人:両方Paginatorsを取って、defaul「ソート」キーを使用していたので、

[ 
    'defaultSortFieldName' => 'event.id', 
    'defaultSortDirection' => 'DESC', 
    'wrap-queries' => true, 
    'defaultFilterFields' => ['event.name', 'eventText.description'] 
] 

問題は、ソートパラメータ名で登場それはグローバル$ _GET配列からです - あなたはそれを自分で確認することができます:Knp \ Component \ Pager \ Event \ Subscriber \ Sortable \ Doctrine \ ORM \ QuerySubscriber

謎めいた部分はエラーがスローされていましたが:

UnexpectedValueException: There is no component aliased by [event] in the given Query 

この変人/ crappinessを避けるために、私はあなたのPaginatorsのすべてに追加できる「sortFieldParameterName」オプションを見つけましたオプション:

​​
+0

これは、私がコメントしたのと同じパラメータのようです: "knp-componentファイル(Paginatior.php)を検索した後、 'sortFieldParameterName' =>" sort1 "、" sortDirectionParameterName "=>"方向1 "を選択することもできます。私は2017年にはまだ正確な文書がないと思う。 – Rishi

関連する問題