对于laravel分页,自带一个paginate的方法,很好用,但是也是有局限性的。
PHP;">
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,$limit = 10)
{
$isValidate = self::validate($data,$page,$limit); //验证
if ($isValidate === false) {
return false;
}
$res = self::paginate($data,$limit)->toArray(); //<a href="/tag/fenye/" target="_blank" class="keywords">分页</a>数据转换为数组
//<a href="/tag/shangyiye/" target="_blank" class="keywords">上一页</a> || <a href="/tag/xiayiye/" target="_blank" class="keywords">下一页</a> => 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;
}
}