我有一个控制器,它使用KnpPaginator Bundle将2个分页的结果集传递给一个twig(作为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
));
只有当我通过两个分页(paginationTest& paginationReview)时才出现错误,如果我只通过一个分页,它就会完美无缺。
任何人都可以告诉我如何解决这个问题?
答案 0 :(得分:2)
您的示例无效,因为您对两个分页集使用相同的页面变量“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 }}
享受!
答案 1 :(得分:0)
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']
]
排序参数名称出现问题,因为两个Paginators都使用默认'sort'键,从全局$ _GET数组中获取它 - 您可以自己检查: Knp \ Component \ Pager \ Event \ Subscriber \ Sortable \教义\ ORM \ QuerySubscriber 。
然而,神秘的部分是抛出的错误:
UnexpectedValueException: There is no component aliased by [event] in the given Query
为了避免这种怪异/诡计,我找到了一个' sortFieldParameterName '选项,您可以将其添加到所有Paginators的选项中:
[
'sortFieldParameterName' => 'sort_event',
'defaultSortFieldName' => 'event.id',
'defaultSortDirection' => 'DESC',
'wrap-queries' => true,
]