2016-04-07 16 views
1

Bir sonraki sayfaya ilerlemek için Knp paginator alma sorun yaşıyorum. Sayfa gezinme çubuğu, this image'da görüldüğü gibi doğru görünüyor (adlar sahte) ve sıralama çalışıyor. my.page/show?page=2Knp paginator paginating değil

görünümü şablon show.html.twig içinde ankastre olup AttendeeController tarafından denir: Ben Sayfa 2 ilerlemek çalıştığınızda Fakat, görünüm URL artık şuna benzer olsa da, sayfa 1 kalır:

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

}

kontrolör işlevini çağırır findEventAttendees bir etkinlikle ilişkili katılımcı bulur AttendeeRepository gelen: sayfalara ayrılmış görünüşüdür Katılımcı/index.html.twig tarafından işlenen

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

:

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

Herhangi bir ipucu için teşekkür ederiz!

+2

komutu '$ request-> query-> GETINT ('sayfa', 1)' yerine bu '$ this-> get ('istek' ve geçirilen isteği ile deneyin bu yardım) -> query-> getInt ('sayfa', 1) ' – Matteo

+0

Teşekkür ederim, bu işe yaradı! – yvoloshin

+0

Merhaba @yvoloshin! Rica ederim! Yorumu cevap olarak gönderebilir miyim, böylece soruyu kapatabilir misiniz? – Matteo

cevap

2

Denetleyicide, kapsayıcıdan alınan İstek yerine argüman olarak iletilen Request nesnesini kullanın.

Yani bu deneyin: bunun yerine

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

:

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

kaptan isteğini kaldırılmış bir özelliğimizdir atın.

hizmet kapta isteği ile başa çıkmak az söylemek zor: this annuncement yılında Fabien gördü. İsteği bir servise enjekte etmek neden zor? Tek bir PHP işleminde birden fazla isteğiniz olabileceğinden, (alt istekleri düşünün.) Bu nedenle, kapsayıcının ömrü boyunca istek örneği değişir.

Umut

İlgili konular