LengthAwarePaginator
Класс LengthAwarePaginator используется для создания пагинации, которая содержит полную информацию о всех страницах. В отличие от Paginator, этот класс знает общее количество элементов и общее количество страниц, что позволяет выводить полную навигацию с номерами страниц. Обычно он возвращается методами paginate и simplePaginate.
При создании экземпляра класса в конструктор передаются следующие параметры: коллекция элементов для текущей страницы, общее количество элементов, количество элементов на странице, номер текущей страницы и массив опций для построения URL.
Синтаксис
<?php
use Illuminate\Pagination\LengthAwarePaginator;
new LengthAwarePaginator(
$items,
$total,
$perPage,
$currentPage,
$options
);
?>
Пример
Давайте создадим пагинатор для массива из 50 элементов, выводя по 10 элементов на страницу:
<?php
namespace App\Http\Controllers;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index(Request $request)
{
$data = array_fill(0, 50, 'article');
$perPage = 10;
$currentPage = $request->get('page', 1);
$offset = ($currentPage - 1) * $perPage;
$items = array_slice($data, $offset, $perPage);
$res = new LengthAwarePaginator(
$items,
count($data),
$perPage,
$currentPage,
['path' => $request->url()]
);
return view('articles.index', ['res' => $res]);
}
}
?>
Пример
Давайте выведем информацию о пагинации в Blade-шаблоне:
<div>
@foreach ($res as $item)
<p>{{ $item }}</p>
@endforeach
<p>Всего записей: {{ $res->total() }}</p>
<p>Всего страниц: {{ $res->lastPage() }}</p>
<p>Текущая страница: {{ $res->currentPage() }}</p>
</div>
Пример
Давайте получим ссылки на все страницы для навигации:
<div>
@foreach ($res as $item)
<p>{{ $item }}</p>
@endforeach
@if ($res->hasPages())
<div>
@if (!$res->onFirstPage())
<a href="{{ $res->previousPageUrl() }}">Назад</a>
@endif
@for ($i = 1; $i <= $res->lastPage(); $i++)
<a href="{{ $res->url($i) }}">{{ $i }}</a>
@endfor
@if ($res->hasMorePages())
<a href="{{ $res->nextPageUrl() }}">Вперёд</a>
@endif
</div>
@endif
</div>
Пример
Давайте используем встроенный метод links для вывода готовой навигации:
<div>
@foreach ($res as $item)
<p>{{ $item }}</p>
@endforeach
{{ $res->links() }}
</div>
Пример
Давайте используем метод appends для добавления дополнительных параметров запроса к ссылкам:
<div>
@foreach ($res as $item)
<p>{{ $item }}</p>
@endforeach
{{ $res->appends(['search' => 'laravel'])->links() }}
</div>
Смотрите также
-
метод
paginate,
который возвращает экземпляр LengthAwarePaginator -
метод
simplePaginate,
который возвращает экземпляр Paginator -
метод
links,
который генерирует HTML-ссылку навигации -
метод
appends,
который добавляет параметры запроса к ссылкам пагинации