Laravel 分頁(Pagination)功能應用
分頁 Pagination
在設計頁面的時候,像是文章列表這種呈現數量很多的時候就必須進行分頁。過往在實作分頁的時候其實很複雜,但是在 Laravel 當中已經有幫忙寫好的 Pagination 可以直接拿來用。
基本設定
在 Controller 或其他地方進行資料庫查詢的時候,要針對查詢結果加上 paginate()
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class PostController extends Controller
{
public function index()
{
$posts = DB::table('posts')->paginate(15);
return view('post', ['posts' => $posts]);
}
}
如果和我一樣使用原生語句查詢,只能改用 DB::raw 來撈回資料實體,如果使用 DB::select 資料會被序列化成為陣列。另外,由於 DB::raw 不會被 laravel 進行任何處理,所以也無法透過繫結方式帶入參數,只能自己串接,如果自己串接參數,要記得自行過濾,因為 DB::raw 下 laravel 不會幫忙過濾參數,要注意不要讓這裡變成程式的攻擊注入點。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class PostController extends Controller
{
public function index(){
DB::connection('mysql');
$posts = DB::table(DB::raw("(SELECT * FROM posts) as Post"))->paginate(15);
return view('post', ['posts' => $posts]);
}
}
簡單版本:如果只需要上一頁跟下一頁,可以把 paginate 替換成 simplePaginate(15)。
輸出分頁
找到要輸出的模板之後,放入下面一段程式碼
{{ $posts->links() }}
這樣就可以看到有分頁功能了
客製化
分頁預設依賴於 bootstrap 框架,如果沒有使用 bootstrap 而改用其他框架就必須客製化,先在專案下輸入指令:
php artisan vendor:publish --tag=laravel-pagination
執行完成後會發現 views/vendor/pagination 下面多了很多模板
bootstrap-4.blade.php 是預設使用的,如果要修改可以直接改這一支檔案。
改用其他檔案做為預設模板
如果要改用其他的模板,可以到 app/Providers/AppServiceProvider.php 這支檔案下引入 Paginator,然後在 root() 加入 defaultView 方法。
5分鐘
2021-01-05 23:08:00
Laravel 分頁(Pagination)功能應用
分頁 Pagination
在設計頁面的時候,像是文章列表這種呈現數量很多的時候就必須進行分頁。過往在實作分頁的時候其實很複雜,但是在 Laravel 當中已經有幫忙寫好的 Pagination 可以直接拿來用。
基本設定
在 Controller 或其他地方進行資料庫查詢的時候,要針對查詢結果加上 paginate()
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class PostController extends Controller
{
public function index()
{
$posts = DB::table('posts')->paginate(15);
return view('post', ['posts' => $posts]);
}
}
如果和我一樣使用原生語句查詢,只能改用 DB::raw 來撈回資料實體,如果使用 DB::select 資料會被序列化成為陣列。另外,由於 DB::raw 不會被 laravel 進行任何處理,所以也無法透過繫結方式帶入參數,只能自己串接,如果自己串接參數,要記得自行過濾,因為 DB::raw 下 laravel 不會幫忙過濾參數,要注意不要讓這裡變成程式的攻擊注入點。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
class PostController extends Controller
{
public function index(){
DB::connection('mysql');
$posts = DB::table(DB::raw("(SELECT * FROM posts) as Post"))->paginate(15);
return view('post', ['posts' => $posts]);
}
}
簡單版本
如果只需要上一頁跟下一頁,可以把 paginate 替換成 simplePaginate(15)。
輸出分頁
找到要輸出的模板之後,放入下面一段程式碼
{{ $posts->links() }}
這樣就可以看到有分頁功能了
客製化
分頁預設依賴於 bootstrap 框架,如果沒有使用 bootstrap 而改用其他框架就必須客製化,先在專案下輸入指令:
php artisan vendor:publish --tag=laravel-pagination
執行完成後會發現 views/vendor/pagination 下面多了很多模板
bootstrap-4.blade.php 是預設使用的,如果要修改可以直接改這一支檔案。
改用其他檔案做為預設模板
如果要改用其他的模板,可以到 app/Providers/AppServiceProvider.php 這支檔案下引入 Paginator,然後在 root() 加入 defaultView 方法。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::defaultView('vendor.pagination.semantic-ui');
}
}
如果不想修改到系統檔案,也可以在使用分頁的樣版上為 links 方法帶入參數
{{ $posts->links('vendor.pagination.default') }}
這樣就可以替不同頁面使用不同的分頁樣板了。
Originally published at https://studio-44s.tw.