Laravel은 PHP로 작성된 무료 오픈 소스 웹 애플리케이션 프레임워크입니다. 간단한 구문, 아름다운 디자인, 강력한 확장성으로 인해 오랫동안 웹 개발 분야의 표준 중 하나로 자리매김해 왔으며 대다수 개발자의 환영을 받아왔습니다.
그리고 라라벨만의 페이지 매김 방식인 Paginator도 특징 중 하나입니다. 그러나 때로는 특별한 요구 사항을 충족하기 위해 페이징을 수동으로 구현해야 하는 경우도 있습니다. 그럼 페이징 기능을 수동으로 구현하는 방법을 자세히 소개하겠습니다.
페이징을 수동으로 구현하기 전에 조명/지원이라는 Laravel 구성 요소를 설치해야 합니다. 이 패키지는 작지만 중요한 보조 기능을 제공합니다. Composer를 통해 설치할 수 있습니다:
composer require illuminate/support
설치가 완료된 후 Laravel 프로젝트의 config/app.php 파일에 공급자를 추가해야 합니다:
'providers' => [ // ... Illuminate\Support\ServiceProvider::class, // ... ],
이러한 방법으로 다음에서 제공하는 페이징 기능을 사용할 수 있습니다. 라라벨.
라라벨 고유의 Paginator 메소드를 사용하여 쿼리 결과를 페이징할 수 있지만, 이로 인해 데이터베이스에 두 번 쿼리가 발생하고 때로는 수동 구현만큼 성능이 좋지 않을 수도 있습니다. 수동 페이징을 구현하는 방법은 Laravel에서 제공하는 Collection 구현을 사용하는 것입니다.
먼저 전달된 매개변수를 정의합니다. $perPage는 각 페이지에 표시되는 항목 수를 나타내고 $page는 현재 페이지 번호를 나타냅니다.
public function manualPaginate($perPage, $page) { $records = DB::table('table_name')->get(); // 从数据库中取出所有记录 $total = count($records); // 根据记录总数获取总条数 $start = ($page - 1) * $perPage; // 获取这一页的起始位置 $records = collect($records); // 将获取的记录转换成 Collection 类型 $pageData = $records->slice($start, $perPage); // 获取这一页的记录 $paginator = new LengthAwarePaginator( // 将分页数据封装成分页器 $pageData, $total, $perPage, $page, [ 'path' => LengthAwarePaginator::resolveCurrentPath(), // 当前页的 URL 地址 'pageName' => 'page', ] ); return $paginator; // 返回分页器对象 }
위 코드에서는 먼저 데이터베이스에서 모든 레코드를 가져온 다음 총 레코드 수를 통해 총 레코드 수를 얻은 다음 이 페이지의 시작 위치와 이 페이지의 레코드를 가져와서 변환합니다. 수집된 레코드를 Collection 유형으로 변환한 다음 LengthAwarePaginator 클래스를 통해 페이징 데이터를 페이저에 캡슐화하고 마지막으로 페이저 개체를 반환합니다.
뷰에서 다음과 같은 방법으로 페이지네이터의 요소를 얻을 수 있습니다:
{{-- 获取分页数据 --}} @foreach ($paginator as $item) <tr> <td>{{ $item->id }}</td> <td>{{ $item->name }}</td> <td>{{ $item->email }}</td> </tr> @endforeach {{-- 获取分页链接 --}} {{ $paginator->links() }}
이 시점에서 페이징 기능을 수동으로 구현했습니다. 물론 이는 단순한 예시일 뿐 실제 상황에서는 더욱 복잡한 처리 로직이 필요할 수 있다. 그러나 이 간단한 구현을 통해 수동 페이징의 원리를 더 깊이 이해할 수 있으며 실제 프로젝트에서 페이징 기능을 사용자 정의하기 위한 몇 가지 아이디어를 제공할 수도 있습니다.
위 내용은 laravel에서 페이징 기능을 수동으로 구현하는 방법을 설명하는 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!