这篇文章主要介绍laravel如何实现自定义分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
对于laravel分页,自带一个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如何实现自定义分页”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。