Laravelで配列をページネーションする

laravelで配列をページネーションする方法の備忘録です。
環境は Laravel v8.83.6 (PHP v7.4.28) です。

#### Controller
```:app/Http/Controllers/HomeController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;

class HomeController extends Controller
{
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $arr = [
            ['dep'=>'06:09', 'arr'=>'08:12', 'train'=>'とき300号', 'dest'='東京'],
            ['dep'=>'06:34', 'arr'=>'08:48', 'train'=>'とき302号', 'dest'='東京'],
            ['dep'=>'06:58', 'arr'=>'09:00', 'train'=>'とき304号', 'dest'='東京'],
            ['dep'=>'07:19', 'arr'=>'09:40', 'train'=>'とき306号', 'dest'='東京'],
            ['dep'=>'07:50', 'arr'=>'10:04', 'train'=>'とき308号', 'dest'='東京'],
            ['dep'=>'08:26', 'arr'=>'10:28', 'train'=>'とき310号', 'dest'='東京'],
            ['dep'=>'09:05', 'arr'=>'10:43', 'train'=>'とき312号', 'dest'='東京'],
        ];
  
        $coll = collect($arr);
  
        $data = $this->paginate($coll);
   
        return view('home', compact('data'));
    }


    private function paginate($items, $perPage = 5, $page = null, $options = [])
    {
        $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
        $items = $items instanceof Collection ? $items : Collection::make($items);
        return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
    }

}
```

#### View
```:resources/views/home.blade.php
<div class="container">
    <table class="table table-bordered">
        <tr>
            <th>出発</th>
            <th>到着</th>
            <th>列車</th>
            <th>行先</th>
        </tr>
        @foreach($data as $elem)
        <tr>
            <td>{{ $elem['dep'] }}</td>
            <td>{{ $elem['arr'] }}</td>
            <td>{{ $elem['train'] }}</td>
            <td>{{ $elem['dest'] }}</td>
        </tr>
        @endforeach
    </table>
</div>
   
{{ $data->links() }}
```

ページネーションされた画面が表示されましたがこのままでは2ページ目が表示されません。

$this->paginate()の第4パラメータにPathを指定します。
2ページ目が正しく表示されます。
```
$data = $this->paginate($collect_list, 5, null, ['path'=>'/home']);
```
**LengthAwarePaginator**へのパラメータ
```
[1ページ分のコレクション] = new LengthAwarePaginator(
            [全コレクション]->forPage([現在のページ番号],[1ページ当たりの表示数]),
            [コレクションの件数],
            [1ページ当たりの表示数],
            [現在のページ番号],
            [オプション(ページの遷移先パス)]
        );
```
#### ちなみに
Laravel8ではTailwindがデフォルトの設定になっているため次のようにBootstrapを使えるように設定しました。
```:app\Providers\AppServiceProvider.php

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Paginator::useBootstrap();  //←追加（Bootstrapのuse宣言）
    }
```
コントローラに次を追加する。
```
use Illuminate\Pagination\Paginator;
```

#### 参考記事
この記事は以下の情報を参考にして記述しました。
- [Laravel 8/7 Paginate with Collection or Array](https://www.itsolutionstuff.com/post/laravel-6-paginate-with-collection-or-arrayexample.html)
- [Laravelで自前の配列をPaginatorに](https://qiita.com/t_n/items/1c9a239da4cf938ae0a8)
- [【Laravel】LengthAwarePaginatorを使ってページャーを実装 -Laravel5.5](https://qiita.com/wallkickers/items/35d13a62e0d53ce05732)