際際滷

際際滷Share a Scribd company logo
Laravel の paginate は
匯悶採をやっているのか
及127指 PHP茶氏|奨
弥 屎峠┐かだ しょうへい@okashoi
? 幄塀氏芙ウィルゲ`ト 2015定仟怱秘芙
? _k片 ソリュ`ションユニット 侭奉
? PHP, Laravel, Vue.js
2
徭失B初
際際滷s:
 Laravel の paginate は採をやっているのか
? タイトル宥り
 フレ`ムワ`クのソ`スコ`ドの弖うときの房深プロセス
3
このスライドでつたえたい
https://laravel.com/docs/5.6/pagination
// Controller にて
$users = App?User::paginate(15);
{{-- blade template にて --}}
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}
// Controller にて
$users = App?User::paginate(15);
{{-- blade template にて --}}
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}
Laravel の paginate は匯悶採をやっているのか
routing を乾らずに ペ`ジネ`ション喘の URL (?page=x) が伏まれる
? 拱屬 routing が伏撹される
だけでいい湖じにペ`ジネ`ションのリンクが伏まれる
8
なんか欒屬い´´
$users->links()
´´
// Controller にて
$users = App?User::paginate(15);
{{-- blade template にて --}}
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}
// Controller にて
$users = App?User::paginate(15);
{{-- blade template にて --}}
<div class="container">
@foreach ($users as $user)
{{ $user->name }}
@endforeach
</div>
{{ $users->links() }}
? のり
? ペ`ジネ`ションに駅勣な秤鵑魍屬辰討い
? もこのクラスに伏えている
12
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
?Illuminate?Database?Query?Builder::paginate()
links()
? のり
? ペ`ジネ`ションに駅勣な秤鵑魍屬辰討い
? もこのクラスに伏えている
13
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
?Illuminate?Database?Query?Builder::paginate()
links()
14
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
これらの秤鵑ら、ペ`ジネ`ション何蛍の HTML を伏撹することはできる┐錣る
16
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
17
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
18
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
哈方でもらう
┐錣る
19
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
哈方でもらう
┐錣る
麻竃できる
┐錣る
20
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
哈方でもらう
┐錣る
麻竃できる
┐錣る
殖殖┐錣らない
ここからは娠と鳴遒蕕
┐覆里任舛腓辰費lけ怎
? のり
? ペ`ジネ`ションに駅勣な秤鵑魍屬辰討い
? もこのクラスに伏えている
22
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
?Illuminate?Database?Query?Builder::paginate()
links()
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
?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 を盾Qしてそう
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
?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
?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;
}
ここでセットされてる
輝にクラス協xをさかのぼって佩くと、ここで佩き峭まる
 の柵び竃しw侭がつからない
★ Laravel には ServiceProvider という碧Mみがある
? アプリケ`ションの光侭兜豚I尖が佩われる侭
28
佩き峭まり
Paginator::currentPageResolver()
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
?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
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
哈方でもらう
┐錣る
麻竃できる
┐錣る
殖殖┐錣らない
32
?Illuminate?Pagination?LengthAwarePaginator
// Controller にて
$users = App?User::paginate(15);
DBから函誼できる
┐錣る
哈方でもらう
┐錣る
麻竃できる
┐錣る
わかった
Laravel の paginate は匯悶採をやっているのか
? Laravel の paginate は匯アクロバティックだが
吭翌と険恬喘がoい侘になっていた
? Laravel のコ`ドを弖って佩って
abstract class や interface で佩き峭まったら
それっぽい ServiceProvider を冥すと措い
? こういうの{砲垢襪里 PhpStorm が宴旋。Go To Declaration
? 勣 larvae-ide-helper
https://github.com/barryvdh/laravel-ide-helper
34
まとめ

More Related Content

Laravel の paginate は匯悶採をやっているのか