概要
- ページネーションを実装してみたら想像していたより簡単だったのでまとめる
前提
- 今回のページネーションの実装はlaravelで完結するアプリケーション(表示にbladeを使用)で実装してみた。
- APIのページネーションはおそらく本方法では実装できないはず。
- この記事は下記ドキュメントの内容を元に体験した内容になります。
- 今回の説明では公式ドキュメントに習ってユーザーの一覧をページネーションしてみる。ページネーションの実装ができていないだけで、コントローラーで取得したユーザー情報を表示する処理は整っているものとする。
今回やること
- 全ユーザーの名前一覧を表示しているページでユーザー20件毎にページネーションさせたい。
概要
-
対象データの取得時の設定
-
全ユーザー取得の処理が下記のように記載されていたとする。
use App\Models\User; $users = User::all();
-
下記のように記載を変更する。(今回20件毎にページネーションさせたいから
pagenate()
の引数を20としているが、ここを変更することで1ページに表示する数を変更できる。)use App\Models\User; $users = User::pagenate(20);
-
User::all()
の時は複数のUserモデルを含んだCollectionが$usersに入っていた。User::pagenate()
にするとIlluminate\Pagination\LengthAwarePaginator
のインスタンスが返されるので注意すること。
-
-
bladeファイルにページネーションリンクの設置
-
おそらく
$users
をforeachディレクティブで回してユーザーの情報をあるだけ表示しているはずなので、そのforeachディレクティブのendのすぐ下辺りに下記の内容を追記する。{{ $users->links() }}
-
ここまで問題なく進められていれば、ユーザーの一覧表示ページにアクセスすると下記のように最初の20件のユーザー情報の表示と下部に「pagination.previous」と「pagination.next」といった内容が表示される。ユーザー情報が20件以上ある場合「pagination.next」がクリッカブルになっており、次の20件を開くリンクになっている。
-
これでページネーションのメインの実装は完了した。ただ、ページ遷移のボタンが「pagination.previous」と「pagination.next」となっておりなんだかわかりにくい。これを次で改善する。
- なぜ何も設定しないとこのように表示されるかは下記に記載した。
-
-
ロケーションの変更と翻訳ファイル設置
-
config/app.php
を開く -
locale
の値をja
に変更する。当該設定値のみのconfig/app.php
の内容を下記に記載する。config/app.php/* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => 'ja',
-
resources/lang/ja
直下にpagination.phpを新規作成する。(resources/lang/ja
のディレクトリが存在しない場合は作成する。) -
pagination.phpに下記の内容を記載する。
resources/lang/ja/pagination.php<?php return [ 'previous' => '前へ', 'next' => '次へ', ];
-
下記のように「pagination.previous」と「pagination.next」が「前へ」と「次へ」に変わった。
-