在我看来,Symfony2 KnpPaginator bundle无法对 2 个分页表进行排序



我有 1 个控制器,使用 KnpPaginator Bundle 将 2 个分页结果集传递给树枝(作为 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
    ));
只有当我通过两个分页(分页

测试和分页审查)时,错误才会出现,如果我只通过一个,它就可以完美地工作。

任何人都可以告诉我如何解决这个问题?

您的示例不起作用,因为您对两个分页集使用相同的页面变量"page"。

如果要在同一位置使用两个或多个分页集,则必须执行以下操作:

您的控制器:

...
$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 }}

享受!

现在是

2017 年,我遇到了类似的问题。仅供参考,我正在使用:

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

我试图用Symfony的爬虫运行几个功能测试。他们中的一些人使用带有以下选项的Knp Paginator:

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

而其他具有这些选项的人:

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

排序参数名称出现问题,因为两个分页器都使用defaul"sort"键,从全局$_GET数组中获取它 - 您可以自己检查:Knp\Component\Pager\Event\Subscriber\Sortable\Doctrine\ORM\QuerySubscriber

然而,神秘的部分是抛出的错误:

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

为了避免这种怪异/蹩脚,我找到了一个"sortFieldParameterName"选项,您可以将其添加到所有分页器的选项中:

[
    'sortFieldParameterName' => 'sort_event',
    'defaultSortFieldName' => 'event.id',
    'defaultSortDirection' => 'DESC',
    'wrap-queries' => true,
]

相关内容

  • 没有找到相关文章

最新更新