Knp分页器不分页
Posted
技术标签:
【中文标题】Knp分页器不分页【英文标题】:Knp paginator not paginating 【发布时间】:2016-04-07 21:27:49 【问题描述】:我在让 Knp 分页器前进到下一页时遇到问题。页面导航栏正确显示,如this image 所示(名称是假的),并且排序正常。但是,当我尝试前进到第 2 页时,视图仍停留在第 1 页,即使 URL 现在看起来像这样:my.page/show?page=2
视图模板由 AttendeeController 调用,嵌入在 show.html.twig 中:
<div class="attendance_table">
render(controller(
'AppBundle:Attendee:index', 'request': request, 'id': entity.id
))
</div>
AttendeeController.php:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class AttendeeController extends Controller
public function indexAction(Request $request, $id)
$em = $this->getDoctrine()->getManager();
$attendees = $em->getRepository('AppBundle:Attendee')->findEventAttendees($id);
$event = $em->getRepository('AppBundle:Event')->findOneById($id);
$paginator = $this->get('knp_paginator');
$pagination2 = $paginator->paginate(
$attendees,
$this->get('request')->query->getInt('page', 1), 10
);
return $this->render('Attendee/index.html.twig', array(
'pagination2' => $pagination2,
'event' => $event,
));
控制器从 AttendeeRepository 调用函数 findEventAttendees,查找与事件关联的参与者:
public function findEventAttendees($id)
$em = $this->getEntityManager();
$qb = $em->createQueryBuilder()
->select('a')
->from('AppBundle:Attendee', 'a')
->leftJoin('a.event', 'e')
->where('e.id = :id')
->setParameter('id', $id);
return $qb->getQuery();
分页视图由Attendee/index.html.twig呈现:
% if pagination2.getTotalItemCount > 0 %
<table class="records_list table">
<thead>
<tr>
<th % if pagination2.isSorted('a.firstName') % class="sorted" % endif %>
knp_pagination_sortable(pagination2, 'Name', 'a.firstName')
</th >
<th % if pagination2.isSorted('a.uni') % class="sorted" % endif %>
knp_pagination_sortable(pagination2, 'UNI', 'a.uni')
</th>
</tr>
</thead>
<tbody>
% for attendee in pagination2 %
<tr>
<td> attendee.firstName attendee.lastName </td>
<td> attendee.uni </td>
</tr>
% endfor %
</tbody>
</table>
# display navigation #
<div class="text-center">
knp_pagination_render(pagination2)
</div>
% else %
<h2>Sorry, no attendees were found for the specified event.</h2>
% endif %
感谢您的任何提示!
【问题讨论】:
尝试将请求传递给命令$request->query->getInt('page', 1)
而不是这个$this->get('request')->query->getInt('page', 1)
嗨@yvoloshin!不客气!我可以将评论作为答案发布,以便您关闭问题吗?
当然@Matteo,请这样做。
【参考方案1】:
在控制器中,使用作为参数传递的 Request 对象,而不是从容器中检索到的 Request。
所以试试这个:
$request->query->getInt('page', 1);
而不是这个:
$this->get('request')->query->getInt('page', 1);
从容器中获取请求是一个已弃用的功能。在this annuncement,Fabien 看到:
在服务容器中处理请求很难说 至少。为什么将请求注入服务很难? 因为在一个 php 进程中可以有多个请求 (想想子请求。)因此,在容器的生命周期中, 请求实例更改。
希望有帮助
【讨论】:
以上是关于Knp分页器不分页的主要内容,如果未能解决你的问题,请参考以下文章