就先來看看使用Laravel提供Pagination能夠多麼簡單。
首先,控制器只需要使用BlogPost::paginate($limit)
查詢就好,並將查詢結果直接傳遞給視圖。
public function index()
{
// 如果想要將每頁顯示數量變成可以調整的,
// index需要傳入 (Request $request),並由下方方式取得$limit傳入paginate
// $limit = $request->query('limit', 30);
$posts = BlogPost::paginate(30);
return view("blog/index",[
"posts"=>$posts,
]);
}
BlogPost::paginate($limit)
會自動根據Request的page
參數取得存取的頁面,自動計算offset
,並根據給予的每頁顯示數量限制來查詢。甚至連index()
都不需要傳入Request $request
。傳給視圖的也少了不少。說到視圖,立馬來看看變得多簡潔:
@section('body')
<div class="container">
<ul>
@foreach ($posts as $post)
<li>
<a href="{{route('blog/post.show',['id'=>$post->id])}}">{{ $post->title }}</a>
</li>
@endforeach
</ul>
</div>
{{ $posts->links() }}
@endsection
列出文章清單的部份,大致什麼太大變化。但是頁面頁數選項不再那麼複雜,沒錯,只需要$post->links()
就好。他會自動生成符合Bootstrap的Pagination。在瀏覽器接受到的HTML樣子可能如下:
呵呵,根本不需要寫這麼麻煩…也太簡單了吧!