Submit Search
Upload
Laravel の paginate は一体何をやっているのか
•
3 likes
•
15,463 views
Shohei Okada
Follow
2018-06-27 開催の「第127回 PHP勉強会@東京」におけるLT資料です https://phpstudy.doorkeeper.jp/events/76011
Read less
Read more
Software
Report
Share
Report
Share
1 of 34
Download now
Download to read offline
Recommended
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
潤一 加藤
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Recommended
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
コードで学ぶドメイン駆動設計入門
コードで学ぶドメイン駆動設計入門
潤一 加藤
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Y Watanabe
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
Yasutaka Kawamoto
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
yieldとreturnの話
yieldとreturnの話
bleis tift
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
FuelPHPをさわってみて
FuelPHPをさわってみて
Sotaro Omura
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
More Related Content
What's hot
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
Yasutaka Kawamoto
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
yieldとreturnの話
yieldとreturnの話
bleis tift
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
What's hot
(20)
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
オブジェクト指向できていますか?
オブジェクト指向できていますか?
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PostgreSQLアンチパターン
PostgreSQLアンチパターン
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
Go言語によるwebアプリの作り方
Go言語によるwebアプリの作り方
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
yieldとreturnの話
yieldとreturnの話
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Similar to Laravel の paginate は一体何をやっているのか
FuelPHPをさわってみて
FuelPHPをさわってみて
Sotaro Omura
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
Tatsuyoshi Mashiko
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
Kenjiro Kubota
最近の PHP の話
最近の PHP の話
y-uti
Best practice laravel
Best practice laravel
Risa Ohnishi
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
Cakephp api
Cakephp api
Eiji Yokota
More Better Nested Set
More Better Nested Set
xibbar
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
Satomi Tsujita
PHPの今とこれから2021
PHPの今とこれから2021
Rui Hirokawa
swooleを試してみた
swooleを試してみた
Yukihiro Katsumi
React Native GUIDE
React Native GUIDE
dcubeio
PHPの今とこれから2023
PHPの今とこれから2023
Rui Hirokawa
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
Java ee6 with scala
Java ee6 with scala
Satoshi Kubo
Try Jetpack
Try Jetpack
Hideaki Miyake
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
dany1468
Similar to Laravel の paginate は一体何をやっているのか
(20)
FuelPHPをさわってみて
FuelPHPをさわってみて
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
LaravelでAPI定義を管理する
LaravelでAPI定義を管理する
最近の PHP の話
最近の PHP の話
Best practice laravel
Best practice laravel
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Cakephp api
Cakephp api
More Better Nested Set
More Better Nested Set
Rails初心者レッスン lesson3 3edition
Rails初心者レッスン lesson3 3edition
PHPの今とこれから2021
PHPの今とこれから2021
swooleを試してみた
swooleを試してみた
React Native GUIDE
React Native GUIDE
PHPの今とこれから2023
PHPの今とこれから2023
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Web技術勉強会 20100925
Web技術勉強会 20100925
Java ee6 with scala
Java ee6 with scala
Try Jetpack
Try Jetpack
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
ASP.NET MVC のルーティング設定を少しだけ REST ぽくする
More from Shohei Okada
「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話
Shohei Okada
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
Shohei Okada
PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!
Shohei Okada
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する
Shohei Okada
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
Shohei Okada
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
Shohei Okada
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
Shohei Okada
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Shohei Okada
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
Shohei Okada
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリア
Shohei Okada
PHP でも活用できる Makefile
PHP でも活用できる Makefile
Shohei Okada
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
Shohei Okada
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Shohei Okada
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
Shohei Okada
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Shohei Okada
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
Shohei Okada
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~
Shohei Okada
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
Shohei Okada
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Shohei Okada
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組み
Shohei Okada
More from Shohei Okada
(20)
「登壇しているひとは偉い」という話
「登壇しているひとは偉い」という話
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP 8.0 の新記法を試してみよう!
PHP 8.0 の新記法を試してみよう!
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #shuuumai
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpconokinawa
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
クリーンアーキテクチャの考え方にもとづく Laravel との付き合い方 #phpcondo
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
エラー時にログに出力する情報と画面に表示する情報を分ける #LaravelTokyo
スペシャリストとして組織をつくる、というキャリア
スペシャリストとして組織をつくる、というキャリア
PHP でも活用できる Makefile
PHP でも活用できる Makefile
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組み
Laravel の paginate は一体何をやっているのか
1.
Laravel の paginate
は 一体何をやっているのか 第127回 PHP勉強会@東京
2.
岡田 正平(おかだ しょうへい)@okashoi •
株式会社ウィルゲート 2015年新卒入社 • 開発室 ソリューションユニット 所属 • PHP, Laravel, Vue.js 2 自己紹介 Slides:
3.
① Laravel の
paginate は何をやっているのか • タイトル通り ② フレームワークのソースコードの追うときの思考プロセス 3 このスライドでつたえたい
4.
https://laravel.com/docs/5.6/pagination
5.
// Controller にて $users
= App¥User::paginate(15); {{-- blade template にて --}} <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
6.
// Controller にて $users
= App¥User::paginate(15); {{-- blade template にて --}} <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
7.
8.
routing を触らずに ページネーション用の
URL (?page=x) が生まれる • 勝手に routing が生成される? だけでいい感じにページネーションのリンクが生まれる 8 なんか気持ち悪い…… $users->links()
9.
……
10.
// Controller にて $users
= App¥User::paginate(15); {{-- blade template にて --}} <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
11.
// Controller にて $users
= App¥User::paginate(15); {{-- blade template にて --}} <div class="container"> @foreach ($users as $user) {{ $user->name }} @endforeach </div> {{ $users->links() }}
12.
• の戻り値 • ページネーションに必要な情報を持っている •
もこのクラスに生えている 12 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users = App¥User::paginate(15); ¥Illuminate¥Database¥Query¥Builder::paginate() links()
13.
• の戻り値 • ページネーションに必要な情報を持っている •
もこのクラスに生えている 13 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users = App¥User::paginate(15); ¥Illuminate¥Database¥Query¥Builder::paginate() links()
14.
14 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15);
15.
これらの情報から、ページネーション部分の HTML を生成することはできる(わかる)
16.
16 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15);
17.
17 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる)
18.
18 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる) 引数でもらう (わかる)
19.
19 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる) 引数でもらう (わかる) 算出できる (わかる)
20.
20 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる) 引数でもらう (わかる) 算出できる (わかる) ??(わからない)
21.
ここからは勘と執念の戦い (なのでちょっと駆け足)
22.
• の戻り値 • ページネーションに必要な情報を持っている •
もこのクラスに生えている 22 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users = App¥User::paginate(15); ¥Illuminate¥Database¥Query¥Builder::paginate() links()
23.
23 ¥Illuminate¥Database¥Query¥Builder::paginate() public function paginate($perPage
= 15, $columns = ['*'], $pageName = 'page', $page = null) { $page = $page ?: Paginator::resolveCurrentPage($pageName); $total = $this->getCountForPagination($columns); $results = $total ? $this->forPage($page, $perPage)->get($columns) : collect(); return $this->paginator($results, $total, $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName, ]); }
24.
24 ¥Illuminate¥Database¥Query¥Builder::paginate() public function paginate($perPage
= 15, $columns = ['*'], $pageName = 'page', $page = null) { $page = $page ?: Paginator::resolveCurrentPage($pageName); $total = $this->getCountForPagination($columns); $results = $total ? $this->forPage($page, $perPage)->get($columns) : collect(); return $this->paginator($results, $total, $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName, ]); } currentPage を解決してそう
25.
25 ¥Illuminate¥Pagination¥AbstractPaginator public static function
resolveCurrentPage($pageName = 'page', $default = 1) { if (isset(static::$currentPageResolver)) { return call_user_func(static::$currentPageResolver, $pageName); } return $default; } /** * Set the current page resolver callback. * * @param ¥Closure $resolver * @return void */ public static function currentPageResolver(Closure $resolver) { static::$currentPageResolver = $resolver; }
26.
26 ¥Illuminate¥Pagination¥AbstractPaginator public static function
resolveCurrentPage($pageName = 'page', $default = 1) { if (isset(static::$currentPageResolver)) { return call_user_func(static::$currentPageResolver, $pageName); } return $default; } /** * Set the current page resolver callback. * * @param ¥Closure $resolver * @return void */ public static function currentPageResolver(Closure $resolver) { static::$currentPageResolver = $resolver; } $currentPageResolver を呼び出している $currentPageResolver は……?
27.
27 ¥Illuminate¥Pagination¥AbstractPaginator public static function
resolveCurrentPage($pageName = 'page', $default = 1) { if (isset(static::$currentPageResolver)) { return call_user_func(static::$currentPageResolver, $pageName); } return $default; } /** * Set the current page resolver callback. * * @param ¥Closure $resolver * @return void */ public static function currentPageResolver(Closure $resolver) { static::$currentPageResolver = $resolver; } ここでセットされてる!
28.
順当にクラス定義をさかのぼって行くと、ここで行き止まる = の呼び出し箇所が見つからない → Laravel
には ServiceProvider という仕組みがある • アプリケーションの各所初期処理が行われる場所 28 行き止まり? Paginator::currentPageResolver()
29.
29 ¥Illuminate¥Pagination¥PaginationServiceProvider public function register() { Paginator::viewFactoryResolver(function
() { return $this->app['view']; }); Paginator::currentPathResolver(function () { return $this->app['request']->url(); }); Paginator::currentPageResolver(function ($pageName = 'page') { $page = $this->app['request']->input($pageName); if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) { return (int) $page; } return 1; }); }
30.
30 ¥Illuminate¥Pagination¥PaginationServiceProvider public function register() { Paginator::viewFactoryResolver(function
() { return $this->app['view']; }); Paginator::currentPathResolver(function () { return $this->app['request']->url(); }); Paginator::currentPageResolver(function ($pageName = 'page') { $page = $this->app['request']->input($pageName); if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) { return (int) $page; } return 1; }); } リクエストパラメータ ${pageName} を取得
31.
31 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる) 引数でもらう (わかる) 算出できる (わかる) ??(わからない)
32.
32 ¥Illuminate¥Pagination¥LengthAwarePaginator // Controller にて $users
= App¥User::paginate(15); DBから取得できる (わかる) 引数でもらう (わかる) 算出できる (わかる) わかった!
33.
34.
• Laravel の
paginate は一見アクロバティックだが 意外と副作用が無い形になっていた • Laravel のコードを追って行って abstract class や interface で行き止まったら それっぽい ServiceProvider を探すと良い • こういうの調査するのに PhpStorm が便利!(Go To Declaration) • 要 larvae-ide-helper https://github.com/barryvdh/laravel-ide-helper 34 まとめ
Download now