Tôi đã đọc rằng Pagerfanta là plugin pagination được lựa chọn cho Symfony2, nhưng tôi đang gặp một số vấn đề khiến nó hoạt động chính xác. Tôi đã tải xuống mã cho pagerfanta và PagerfantaBundle và cài đặt chúng như được mô tả trong các WhiteOctober Github readme file và trong this tutorial. Tôi khá chắc chắn các mã trong bộ điều khiển của tôi là okay, nhưng có cái gì đó sai trái với tập tin mẫu của tôi.Cách chính xác để sử dụng Pagerfanta cho pagination trong Symfony2
mã điều khiển của tôi:
public function indexAction($page = null)
{
...
$query = $em->createQuery('SELECT something FROM some_table');
$adapter = new DoctrineORMAdapter($query);
$pager = new Pagerfanta($adapter);
$pager->setMaxPerPage(10);
if (!$page) $page = 1;
try {
$pager->setCurrentPage($page);
}
catch(NotValidCurrentPageException $e) {
throw new NotFoundHttpException('Illegal page');
}
return $this->render('MyBundle:MyEntity:index.html.twig', array(
'pager' => $pager,
));
}
Trong mẫu của tôi:
...
<table>
{% for object in pager.currentPageResults %}
<tr>
<td>{{ object.attribute1 }}</td>
<td>{{ object.attribute2 }}</td>
<td>{{ object.attribute3 }}</td>
</tr>
{% endfor %}
</table>
{% if pager.haveToPaginate %}
{{ pagerfanta(pager) }}
{% endif %}
Khi tôi đi đến trang web, tôi nhận được một danh sách 10 đối tượng đầu tiên. Tuy nhiên, kết xuất của máy nhắn tin chỉ là PreviousNext dưới dạng một từ (không liên kết và không có trang 1, 2, 3, v.v.).
Nếu tôi thêm ?page=2
vào URL, nó sẽ không hiển thị 10 mục tiếp theo trong danh sách.
tôi không thay đổi tuyến đường từ những gì đang là trước khi tôi thêm mã pagination vì tài liệu nói:
Các tuyến đường được tạo ra tự động cho các tuyến đường hiện tại bằng cách sử dụng biến "trang" để truyền bá số trang.
... nhưng tôi tự hỏi nếu định tuyến không chính xác là một phần của sự cố. Giả sử đây là trường hợp, tôi không chắc chắn làm thế nào để tiến hành với điều này.
Tôi không thể tìm thấy bất kỳ hướng dẫn nào khác mà tôi đã liên kết ở trên, vì vậy sẽ rất tuyệt nếu ai đó đã triển khai thành công điều này có thể chia sẻ chi tiết về cách họ đã làm.
Liệu bạn tuyến đường mẫu bao gồm một thuộc tính trang? tức là '/ articles/{page}' – AdrienBrault
Cập nhật: Có vẻ như có vấn đề với bộ điều khiển. Cụ thể, DocrtineORMAdapter không hoạt động đúng (ví dụ '$ pagerfanta-> getNbResults()' trả về 0 - do đó không có trang nào giữa Prevous và Next). Tài liệu nói rằng tham số được truyền cho hàm tạo có thể là Query hoặc QueryBuilder, nhưng tôi nghi ngờ chỉ có tham số sau là đúng. Khi tôi thay đổi thành '$ pagerfanta = new Pagerfanta (new ArrayAdapter ($ query-> getResult())' nó trả về số kết quả chính xác. @AdrienBrault - Tôi đã thực hiện thay đổi bạn đã đề xuất cho mẫu tuyến đường và bây giờ nó hoạt động, nhưng –
Vì vậy, tôi vẫn còn lại với những câu hỏi về lý do tại sao?page = không được tự động thêm vào route theo tài liệu và tại sao css không được áp dụng (bây giờ paginator trông giống như Before123Next, không có khoảng trống hoặc định dạng) –