1

Knp ページネーターが次のページに進むのに問題があります。ページ ナビゲーション バーは、この画像に見られるように正しく表示され(名前は偽物です)、並べ替えも機能します。しかし、ページ 2 に移動しようとすると、URL が次のようになっているにもかかわらず、ビューはページ 1 にとどまります。my.page/show?page=2

ビュー テンプレートは、 show.html.twigに組み込まれている AttendeeController によって呼び出されます。

    <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,
    ));
}

}

コントローラーは、イベントに関連付けられた出席者を検索する関数findEventAttendeesを AttendeeRepository から呼び出します。

    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 %}

ヒントをありがとう!

4

1 に答える 1

2

コントローラーでは、コンテナーから取得した Request の代わりに、引数として渡された Request オブジェクトを使用します。

だからこれを試してください:

$request->query->getInt('page', 1); 

これの代わりに :

$this->get('request')->query->getInt('page', 1);

コンテナーからのリクエストの受け取りは非推奨の機能です。この発表で、Fabien は次のことを確認しました。

サービス コンテナ内でリクエストを処理することは、控えめに言っても困難です。リクエストをサービスに挿入するのが難しいのはなぜですか? 1 つの PHP プロセスで複数のリクエストを持つことができるため (サブリクエストを考えてください)、コンテナの存続期間中にリクエストインスタンスが変更されます。

この助けを願っています

于 2016-04-10T17:52:20.493 に答える