1

KnpPaginator バンドルを使用して、ページ分割された 2 つの結果セットを (テーブルを表す 2 つの配列として) 小枝に渡す 1 つのコントローラーがあります。

両方のテーブルが表示され、ページ分割されていますが、並べ替えることができません。 編集:表 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
    ));

エラーは、両方のページネーション (paginationTest と paginationReview) を渡した場合にのみ表示されます。1 つだけを渡した場合、問題なく動作します。

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

4

2 に答える 2

2

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

同じ場所で 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 }}

楽しみ!

于 2012-05-24T06:58:37.400 に答える