이 글에서는 주로 laravel의 custom paging 구현 코드를 자세하게 소개하고 있는데, 관심 있는 친구들은 참고하면 됩니다.
laravel paging에는 paginate 방식이 포함되어 있어 매우 유용하지만 한계도 있습니다.
그래서 저는 이에 대한 페이징을 직접 작성했습니다. 구체적인 코드는 다음과 같습니다
<?php namespace ...; use ...; /** * 自定义分页类,适合少数据的查询,多数据的时候不推荐 * Class CustomPaginate * @package App\Tools\Paginate */ class CustomPaginate { /** * 自定义数组分页 * @param $data = 返回结果 * @param $page * @param $limit * @return mixed */ public static function paginate($data, $page = 1, $limit = 10) { if (!is_numeric($page) || !is_numeric($limit)) { return false; } $count = count($data); $data = array_slice($data, ($page - 1) * $limit, $limit); return new LengthAwarePaginator($data, $count, $limit, $page); } /** * 参数解释 对外暴露的方法 * @param $data = array|collection 切记只支持这两种 * @param $page = 当前页 * @param $limit = 每一页展示几条 * @return array|false * 返回结果为数组 * 调用实例: CustomPaginate::paginateToArray($data, $request->page, $request->limit); */ public static function paginateToArray($data, $page = 1, $limit = 10) { $isValidate = self::validate($data, $page, $limit); //验证 if ($isValidate === false) { return false; } $res = self::paginate($data, $page, $limit)->toArray(); //分页数据转换为数组 //上一页 || 下一页 => path if ($res['prev_page_url'] != null) { $prev_page = $page - 1; $res['prev_page_url'] = Paginator::resolveCurrentPath() . "?page=" . $prev_page . "&limit=" . $limit; } if ($res['next_page_url'] != null) { $next_page = $page + 1; $res['next_page_url'] = Paginator::resolveCurrentPath() . "?page=" . $next_page . "&limit=" . $limit; } return $res; } /** * 验证参数是否合法 */ public static function validate(&$data, &$page = 1, &$limit = 10) { $page = empty($page) ? 1 : $page; $limit = empty($limit) ? 10 : $limit; if (!is_array($data) && !$data instanceof Collection) { return false;//"自定义分页方法只支持数组数据和集合数据"; } if (!is_numeric($page) || !is_numeric($limit)) { return false;//"page limit 参数只支持数字"; } if ($data instanceof Collection) { return $data = $data->toArray(); } return $data; } }
위 내용은 Laravel 프레임워크의 사용자 정의 페이징 효과 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!