首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knp分页器不分页

Knp分页器不分页
EN

Stack Overflow用户
提问于 2016-04-07 21:27:49
回答 1查看 339关注 0票数 1

我很难让Knp分页器前进到下一页。页面导航栏显示正确,可以在这幅图像中看到(名称是假的),并且排序工作。但是,当我试图进入第2页时,视图将停留在第1页上,尽管URL现在看起来如下:my.page/show?page=2

视图模板由嵌入在show.html.twig中的AttendeeController调用。

代码语言:javascript
复制
    <div class="attendance_table">

        {{ render(controller(
        'AppBundle:Attendee:index', { 'request': request, 'id': entity.id }
        )) }}

    </div>

AttendeeController.php

代码语言:javascript
复制
    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,
    ));
}

}

控制器从findEventAttendees调用函数AttendeeRepository,该函数查找与事件相关的与会者:

代码语言:javascript
复制
    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呈现。

代码语言:javascript
复制
    {% 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 %}

谢谢你的提示!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-10 17:52:20

在控制器中,使用作为参数传递的请求对象,而不是从容器中检索的请求。

所以试试这个:

代码语言:javascript
复制
$request->query->getInt('page', 1); 

而不是这样:

代码语言:javascript
复制
$this->get('request')->query->getInt('page', 1);

接受来自容器的请求是一个不推荐的特性。在这封信,Fabien看到:

在服务容器中处理请求至少是很困难的。为什么很难将请求注入到服务中?因为在一个PHP进程中可以有多个请求(考虑子请求)。因此,在容器的生存期内,请求实例将发生更改。

希望能帮上忙

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36487546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档