【Laravel】ページネーションを自由にカスタマイズする方法|リンクのデザインとURL制御

【Laravel】ページネーションを自由にカスタマイズする方法|リンクのデザインとURL制御 Laravel

Laravelでは、データの一覧表示に便利なページネーション機能が標準で用意されています。初期状態でも十分に使えますが、デザインやURL構造、表示形式を自由にカスタマイズしたいケースも多くあります。この記事では、Laravelのページネーションを自在にカスタマイズする方法を、実用的なコード例とともに解説します。

基本的なページネーションの使い方

Laravelでは、Eloquentやクエリビルダでpaginate()メソッドを使うだけで簡単にページネーションが可能です。

$users = User::paginate(10);
return view('user.index', compact('users'));

Bladeテンプレート内でlinks()を使えば、ページリンクが自動生成されます。

{{ $users->links() }}

ページネーションのデザインをカスタマイズ

LaravelのページネーションはBootstrap向けのデザインがデフォルトですが、Tailwindやオリジナルのデザインにも対応できます。

Tailwindに切り替える

AppServiceProviderboot()メソッド内で指定します。

use Illuminate\Pagination\Paginator;

public function boot()
{
    Paginator::useTailwind();
}

カスタムビューを指定する

以下のようにlinks()に引数を渡すことで、独自のBladeテンプレートを使ったデザインが可能です。

{{ $users->links('pagination.custom') }}

resources/views/pagination/custom.blade.php に自由なHTML構造でページネーションを定義できます。

現在のページや総ページ数を取得してカスタム表示

Blade内でページ情報を使って「1 / 5ページ」のように表示することも可能です。


現在 {{ $users->currentPage() }} / {{ $users->lastPage() }} ページ

URLパラメータを維持したままページネーションする方法

検索フォームやフィルターと組み合わせる場合、ページ遷移時にもクエリパラメータを維持する必要があります。

{{ $users->appends(request()->query())->links() }}

これにより、?keyword=検索語&page=2のようなURLが自動的に生成されます。

ページネーションのURL構造をカスタマイズ

URL構造を変更したい場合は、ルーティングとpaginate()の組み合わせに工夫が必要です。たとえば、/users/page/2のような構造にする場合は、以下のようなルートを定義します。

Route::get('/users/page/{page?}', [UserController::class, 'index'])->name('users.index');

コントローラ側でページ番号を明示的に指定してクエリを構築することも可能です。

$perPage = 10;
$page = $request->input('page', 1);
$users = User::paginate($perPage, ['*'], 'page', $page);

ページネーションの表示数やリンク数を調整

リンクの表示数(前後何件表示するか)を細かく調整したい場合は、カスタムコンポーネントを作成するのが一般的です。Tailwind使用時は、vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php をコピーしてカスタマイズすることもできます。

まとめ

Laravelのページネーションは、標準機能でも十分に実用的ですが、より使いやすいUIやSEOを意識したURL設計のためには、適切なカスタマイズが不可欠です。デザイン、リンク形式、クエリの保持など、プロジェクトの要件に合わせて柔軟に調整していきましょう。