laravelにはデフォルトでページネーションを簡単に実装する機能が備わっています。
ページネーション機能を自作するのは大変なので予め用意されている機能を使って実装していきます。
データの取得
まずコントローラでデータを取得する処理にpaginate()
を追加するだけでページネーション機能を使うことが出来ます。
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* アプリケーションのすべてのユーザーを表示
*/
public function index(): View
{
return view('user.index', [
'users' => DB::table('users')->paginate(15)
]);
}
}
paginate()
の括弧内に、1ページに表示したいアイテムの数を指定できます。
bladeにページネートした結果を表示
コントローラでpaginate()
を使用しただけでは、まだページネーションを表示できません。view側でもコードを追記します。
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}
{{ $users->links() }}
のように@foreach
で展開する前の変数を指定し、使います。
スタイルのカスタマイズ
今のままでもページネーション機能は使えますが、アプリケーションによってデザインをかえたい場合もあります。
その場合は、vendor:publish
コマンドを使用してresources/views/vendorディレクトリにコピーしてカスタマイズしていきます。
php artisan vendor:publish --tag=laravel-pagination
コマンドを実行するとresources/views/vendorディレクトリに予め用意されているテンプレートファイルが7つ程コピーされます。
tailwind用、bootstrap用、シンプルな奴などいろんなテンプレートがありますが、自分のプロジェクトに合うテンプレートを使います。
使わないテンプレートは消してOKです。
今回は、tailwind用のテンプレートファイルのtailwind.blade.php
をuser.blade.php
にリネームして使います。
カスタマイズしたテンプレートを呼び出す
スタイルをカスタマイズしたら、最後にbladeファイルの{{ $users->links() }}
にカスタマイズしたファイルを指定して完成です。
呼び出し方はシンプルに、引数に指定すれば指定したテンプレートファイルを読み込んでくれます。
{{ $users->links('pagination::user') }}
参考記事