Soumettre la recherche
Mettre en ligne
Laravel の paginate は一体何をやっているのか
•
3 j'aime
•
15,467 vues
Shohei Okada
Suivre
2018-06-27 開催の「第127回 PHP勉強会@東京」におけるLT資料です https://phpstudy.doorkeeper.jp/events/76011
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 34
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
例外設計における大罪
例外設計における大罪
Takuto Wada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Recommandé
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
例外設計における大罪
例外設計における大罪
Takuto Wada
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Shohei Okada
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
MinoDriven
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
KeijiUehata1
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
こわくない Git
こわくない Git
Kota Saito
FuelPHPをさわってみて
FuelPHPをさわってみて
Sotaro Omura
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
Sotaro Omura
Contenu connexe
Tendances
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
Yuta Matsumura
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Shohei Okada
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
MinoDriven
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
KeijiUehata1
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
こわくない Git
こわくない Git
Kota Saito
Tendances
(20)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
「自分のとこでは動くけど…」を無くす devcontainer
「自分のとこでは動くけど…」を無くす devcontainer
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
クソコード動画「Managerクラス」解説
クソコード動画「Managerクラス」解説
Python製BDDツールで自動化してみた
Python製BDDツールで自動化してみた
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
こわくない Git
こわくない Git
Similaire à 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
Similaire à 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 ぽくする
Plus de 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
働き方が大きく変わった 入社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
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
Plus de 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 でやったのでパッケージ構成を晒すよ
働き方が大きく変わった 入社3年目のときのとあるエピソード
働き方が大きく変わった 入社3年目のときのとあるエピソード
Laravel で API バージョニングを実装するなら
Laravel で API バージョニングを実装するなら
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
2017 年度を振り返って ~アウトプット編~
2017 年度を振り返って ~アウトプット編~
Laravel × レイヤードアーキテクチャをやってみている話
Laravel × レイヤードアーキテクチャをやってみている話
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
Laravel 5.6 デフォルトの例外ハンドリング処理をまとめてみた
チームで「きちんと」Laravel を使っていくための取り組み
チームで「きちんと」Laravel を使っていくための取り組み
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
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 まとめ
Télécharger maintenant