Пагинация в Laravel с использованием Bootstrap
В этом уроке мы расскажем, как создать простую пагинацию страниц в приложении Laravel. Мы рассмотрим привязку с помощью метода pagination() для отображения результатов в меньших размерах с использованием paginate() и links() функцией.
Интегрировать нумерацию страниц в Laravel очень просто благодаря построителю запросов и Eloquent ORM. Он предлагает удобный и творческий способ отображения результатов базы данных небольшими фрагментами. Пагинация хорошо работает с фреймворком Bootstrap CSS.
Установку и настройку приложения в данном уроке мы рассматривать не будем, дабы не растягивать урок, а сконцентрируемся на теме пагинации страниц в Laravel. Давайте начнем!
Контроллер и маршрут
Запустите команду для создания контроллера сотрудников.
php artisan make:controller EmployeeController
Поместите следующий код в файл app/Http/ControllersEmployeeController.php .
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Employee;
class EmployeeController extends Controller
{
public function getData(){
$employeeData = Employee::all();
return view('home', compact('employeeData'));
}
}
Создать маршрут
Перейдите к routes/web.php , чтобы включить следующий код, чтобы определить маршрут и привязать к нему контроллер.
use App\Http\Controllers\ EmployeeController;
Route::get('/', [EmployeeController::class, 'getData']);
Рендеринг записей в представлении
Сначала создайте блейд-файл resources/views/home.blade.php и поместите в него следующий код для отображения записей сотрудников в представлении Laravel с использованием компонента Bootstrap Table.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Laravel Pagination Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<table class="table table-bordered mb-5">
<thead>
<tr class="table-success">
<th scope="col">#</th>
<th scope="col">First name</th>
<th scope="col">Last name</th>
<th scope="col">Email</th>
<th scope="col">DOB</th>
</tr>
</thead>
<tbody>
@foreach($employees as $data)
<tr>
<th scope="row">{{ $data->id }}</th>
<td>{{ $data->firstname }}</td>
<td>{{ $data->lastname }}</td>
<td>{{ $data->email }}</td>
<td>{{ $data->dob }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</body>
</html>
Используйте пагинацию в Laravel
Пагинация страниц — это способ показать большие данные в небольшой части. Пагинация в Laravel очень проста в использовании; она интегрирована с построителем запросов(QueryBuilder) и Eloquent ORM. Пагинация в Laravel автоматически покрывает лимит и смещение.
Реализация нумерации страниц в laravel проста: добавьте функцию paginate laravel в функцию getData() внутри класса WorkerController. Удалите all() и используйте paginate() , он принимает число в качестве аргумента, это число определяет количество результатов, которые будут показаны пользователю.
// app > http > controllers > EmployeeController.php
class EmployeeController extends Controller {
public function getData(){
$employees = Employee::paginate(8);
return view('home', compact('employees'));
}
}
Чтобы отобразить компонент нумерации страниц в представлении, нам нужно добавить следующий код в файл home.blade.php под компонентом таблицы. Поскольку пагинация страниц в Laravel хорошо сочетается с Bootstrap 4, нам не нужно беспокоиться о пользовательском интерфейсе нумерации страниц.
<div class="d-flex justify-content-center">
{!! $employees->links() !!}
</div>
Вот окончательный файл home.blade.php .
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Laravel Pagination Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<table class="table table-bordered mb-5">
<thead>
<tr class="table-success">
<th scope="col">#</th>
<th scope="col">First name</th>
<th scope="col">Last name</th>
<th scope="col">Email</th>
<th scope="col">DOB</th>
</tr>
</thead>
<tbody>
@foreach($employees as $data)
<tr>
<th scope="row">{{ $data->id }}</th>
<td>{{ $data->firstname }}</td>
<td>{{ $data->lastname }}</td>
<td>{{ $data->email }}</td>
<td>{{ $data->dob }}</td>
</tr>
@endforeach
</tbody>
</table>
{{-- Pagination --}}
<div class="d-flex justify-content-center">
{!! $employees->links() !!}
</div>
</div>
</body>
</html>
Пользовательский параметр пагинации страниц Laravel
Мы создали простую пагиацию страниц, которая отображает несколько страниц результатов и создает примерно такой URL-адрес. По сути, он добавляет файл ?page=3
.
Добавить параметр к нумерации страниц
Мы можем просто добавить дополнительный параметр к URL-адресу разбивки на страницы, используя следующий код.
{!! $employees->appends(['sort' => 'department'])->links() !!}
Более того, вам необходимо импортировать и определить useBootstrap() внутри функции загрузки в файле app/Providers/AppServiceProvider.php :
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::useBootstrap();
}
}
Преобразование результатов пагинации в JSON
Классы результатов пагинатора Laravel реализуют контракт интерфейса Illuminate\Contracts\Support\Jsonable и предоставляют метод toJson. Преобразовать результаты разбивки на страницы в JSON очень просто. Вы также можете преобразовать экземпляр пагинатора в JSON, вернув его из маршрута или действия контроллера.
Откройте файл routes/web.php и поместите следующий маршрут с функцией разбиения на страницы.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\EmployeeController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', [EmployeeController::class, 'getData']);
Route::get('/convert-to-json', function () {
return App\Employee::paginate(5);
});
Вы можете получить данные JSON разбивки на страницы по URL-адресу:
http://127.0.0.1:8000/convert-to-json
{
"current_page":1,
"data":[
{
"id":1,
"firstname":"Hardy",
"lastname":"Kuhlman",
"email":"vcummerata@yahoo.com",
"dob":"Thu-01-70"
},
{
"id":2,
"firstname":"Missouri",
"lastname":"Gaylord",
"email":"daniel.gene@yahoo.com",
"dob":"Thu-01-70"
},
{
"id":3,
"firstname":"Kaela",
"lastname":"O'Hara",
"email":"eparker@yahoo.com",
"dob":"Thu-01-70"
},
{
"id":4,
"firstname":"George",
"lastname":"O'Kon",
"email":"wmurazik@purdy.biz",
"dob":"Thu-01-70"
},
{
"id":5,
"firstname":"Chaim",
"lastname":"Jerde",
"email":"jerome89@collins.com",
"dob":"Thu-01-70"
}
],
"first_page_url":"http:\/\/127.0.0.1:8000\/home?page=1",
"from":1,
"last_page":100,
"last_page_url":"http:\/\/127.0.0.1:8000\/home?page=100",
"next_page_url":"http:\/\/127.0.0.1:8000\/home?page=2",
"path":"http:\/\/127.0.0.1:8000\/home",
"per_page":5,
"prev_page_url":null,
"to":5,
"total":500
}
Запустите приложение Laravel
Выполните следующую команду, чтобы запустить демонстрационный проект пагинации страниц Laravel.
php artisan serve
Проверьте приложение по адресу http://127.0.0.1:8000 .
Заключение
Наконец, мы завершили руководство по разбивке на страницы Laravel на примере. В этом уроке мы научились работать с пагинацией страниц в Laravel.
Мы узнали о создании контроллера, файла представления маршрута и блейда, и, самое главное, мы научились использовать компонент пагинации страниц в laravel.
Мы поняли различные другие методы, такие как передача пользовательских параметров с разбивкой на страницы и преобразование результатов разбивки на страницы в JSON.