ホームページ > 記事 > PHPフレームワーク > laravelでページング機能を手動で実装する方法を説明する例
Laravel は、PHP で書かれた無料のオープンソース Web アプリケーション フレームワークです。これは長い間 Web 開発分野の標準の 1 つとなっており、そのシンプルな構文、美しいデザイン、強力な拡張性により、大多数の開発者に歓迎されています。
そして、Laravel 独自のページングメソッド Paginator も特別な機能の 1 つです。ただし、特別なニーズを満たすためにページングを手動で実装する必要がある場合があります。それでは、ページング機能を手動で実装する方法を詳しく紹介します。
ページングを手動で実装する前に、illuminate/support という Laravel コンポーネントをインストールする必要があります。このパッケージには、小さいながらも重要な補助関数がいくつか用意されています。 Composer を通じてインストールできます:
composer require illuminate/support
インストールが完了したら、Laravel プロジェクトの config/app.php ファイルにプロバイダーを追加する必要があります:
'providers' => [ // ... Illuminate\Support\ServiceProvider::class, // ... ],
このように、 Laravel が提供するページネーション機能を使用できます。
Laravel 独自の Paginator メソッドを使用してクエリ結果をページ分割できますが、これによりデータベースが 2 回クエリされることになり、場合によってはパフォーマンスが手動ほど良くない可能性があります。実装。手動ページングを実装する方法は、Laravel が提供する Collection 実装を使用することです。
最初に、渡されるパラメーターを定義します。$perPage は各ページに表示されるアイテムの数を表し、$page は現在のページ番号を表します。
public function manualPaginate($perPage, $page) { $records = DB::table('table_name')->get(); // 从数据库中取出所有记录 $total = count($records); // 根据记录总数获取总条数 $start = ($page - 1) * $perPage; // 获取这一页的起始位置 $records = collect($records); // 将获取的记录转换成 Collection 类型 $pageData = $records->slice($start, $perPage); // 获取这一页的记录 $paginator = new LengthAwarePaginator( // 将分页数据封装成分页器 $pageData, $total, $perPage, $page, [ 'path' => LengthAwarePaginator::resolveCurrentPath(), // 当前页的 URL 地址 'pageName' => 'page', ] ); return $paginator; // 返回分页器对象 }
上記のコードでは、最初にデータベースからすべてのレコードを取得し、次にレコードの総数からレコードの総数を取得し、次にこのページの開始位置とこのページのレコードを取得します。レコードは Collection 型に変換され、ページング データは LengthAwarePaginator クラスを通じてページャーにカプセル化され、最後にページャー オブジェクトが返されます。
ビューでは、次の方法でページネーターの要素を取得できます。
{{-- 获取分页数据 --}} @foreach ($paginator as $item) <tr> <td>{{ $item->id }}</td> <td>{{ $item->name }}</td> <td>{{ $item->email }}</td> </tr> @endforeach {{-- 获取分页链接 --}} {{ $paginator->links() }}
この時点で、ページング関数を手動で実装しました。もちろん、これは単純な例にすぎず、実際の状況ではさらに複雑な処理ロジックが必要になる場合があります。ただし、この単純な実装を通じて、手動ページングの原理をより深く理解することができ、実際のプロジェクトでページング機能をカスタマイズするためのいくつかのアイデアも得ることができます。
以上がlaravelでページング機能を手動で実装する方法を説明する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。