<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5);returnview('users.index')->with(compact('users'));});
<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5);returnresponse()->json([$users],200);});
E 3.
C:\xampp8\htdocs\datvietcoconut\routes\web.php
<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5)->withQueryString();;returnview('users.index')->with(compact('users'));});
E 4. Appends
C:\xampp8\htdocs\datvietcoconut\routes\web.php
<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5); $users->appends(['sort'=>'votes']);returnview('users.index')->with(compact('users'));});
E 5. thêm cách hash fragment
C:\xampp8\htdocs\datvietcoconut\routes\web.php
<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5)->fragment('users');returnview('users.index')->with(compact('users'));});
😁 Bạn có thể export các view mặc định của Laravel ra thư mục resources/views/vendor để tiện cho việc tham khảo cũng như là chỉnh sửa. Để export view bạn có thể sử dụng command vendor:publish với tham số --tag=laravel-pagination.
Hoặc muốn truyền thêm data vào view {{ $paginator->links('view.name', ['foo' => 'bar']) }}
C:\xampp8\htdocs\datvietcoconut\routes\web.php
<?phpuseIlluminate\Support\Facades\Route;useApp\Models\User;/*|--------------------------------------------------------------------------| Web Routes|--------------------------------------------------------------------------|| Here is where you can register web routes for your application. These| routes are loaded by the RouteServiceProvider within a group which| contains the "web" middleware group. Now create something great!|*/Route::get('/',function () { $users =User::paginate(5);returnview('users.index')->with(compact('users'));});
$perPage - là số lượng item sẽ lấy ra và hiển thị trên mỗi trang. Mặc định sẽ là 15 item trên mỗi trang.
$columns - là những cột sẽ lấy ra trong database. Mặc định sẽ lấy hết (SELETC *)
$pageName - là tên của query string sẽ chứa tham số page number. Mặc định $pageName = 'page'.
$page - là item bạn muốn lấy ra là trang số mấy, nếu page là null thì Laravel sẽ xử lý theo data của page query string. Mặc định $page = null.
VD: phân trang 5 User trong bảng users một trang.
phpcopy<?phpnamespaceApp\Http\Controllers;useApp\Http\Controllers\Controller;useIlluminate\Support\Facades\DB;classUserControllerextendsController{/** * Show all of the users for the application. * * @return\Illuminate\Http\Response */publicfunctionindex() {returnview('user.index', ['users'=>DB::table('users')->paginate(5) ]); }}
Trong trường hợp bạn muốn sử dụng pagination dạng đơn giản, chỉ có 2 button là previous và next thì bạn có thể sử dụng phương thức simplePaginate với cú pháp tương tự như phương thức paginate.
Trong trường hợp data của bạn là một dữ liệu không phải được trả về từ Query Builder hoặc Elequent ORM, bạn có thể sử dụng một trong hai class Illuminate\Pagination\Paginator hoặc Illuminate\Pagination\LengthAwarePaginator để tạo ra pagination với cú pháp:
$perPage - là số lượng item sẽ lấy ra và hiển thị trên mỗi trang.
$currentPage - là trang dữ liệu bạn muốn lấy ra hiện tại. Mặc định $currentPage = null.
$options - là các tham số cấu hình thêm cho pagination. Mặc định $options = [].
Như các bạn đã thấy thì Ở Paginator không tồn tại tham số $total vì lớp paginator này tương tự như simplePaginate nên nó không cần phải lấy ra tổng số lượng item trong mảng, còn LengthAwarePaginator thì tương tự như paginate nên nó cần lấy ra tổng số lượng item để tính toán và hiển thị.
VD:
phpcopy$students = [ ['name'=>'Lo thi vi song'], ['name'=>'Tran Nhu Nhong'], ['name'=>'Son Tung MTP'], ['name'=>'Tung Son Ido'],];$paginate =new\Illuminate\Pagination\Paginator($students,2);
Hoặc bạn có thể sử dụng phương thức withQueryString để add thêm tất cả các query string trên URL hiện tại vào trong paginate.
VD:
$users =User::paginate(15)->withQueryString();
Bạn cũng có thể thêm cách hash fragment vào cuối URL trong pagination bằng cách sử dụng phương thức fragment.
VD: Thêm #users vào cuối URL.
$users =User::paginate(15)->fragment('users');
3. Hiển thị Pagination Data.
Sau khi đã lấy được data cần phân trang rồi thì giờ chúng ta cần hiển thị chúng ra view. Như mình đã nói ở phần trên thì với trường hợp các bạn sử dụng phương thức paginate thì Laravel sẽ trả về LengthAwarePaginator, simplePaginate sẽ trả về Paginator và cả hai phương thức này đều trả về result set như nhau. Các bạn có thể lặp dữ liệu như một array bình thường.
Trong trường hợp bạn không muốn sử dụng pagination view mặc định của Laravel, bạn có thể chỉ định view khác, hoặc thậm chí viết thêm view của bạn. Để thay đổi view bạn chỉ cần truyền view name vào trong phương thức links.
VD:
phpcopy{{ $paginator->links('view.name') }}// Hoặc muốn truyền thêm data vào view{{ $paginator->links('view.name', ['foo'=>'bar']) }}
Bạn có thể export các view mặc định của Laravel ra thư mục resources/views/vendor để tiện cho việc tham khảo cũng như là chỉnh sửa. Để export view bạn có thể sử dụng command vendor:publish với tham số --tag=laravel-pagination.