laravel自定义分页效果


Posted in PHP onJuly 23, 2017

对于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;
  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 日常开发小技巧
Sep 23 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php格式化日期实例分析
Nov 12 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
PHP批量删除jQuery操作
Jul 23 #PHP
PHP mysqli事务操作常用方法分析
Jul 22 #PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 #PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 #PHP
PHP编程快速实现数组去重的方法详解
Jul 22 #PHP
php使用ftp实现文件上传与下载功能
Jul 21 #PHP
YII2框架中excel表格导出的方法详解
Jul 21 #PHP
You might like
简单谈谈php延迟静态绑定
2016/01/26 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
2017/12/05 jQuery
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
selenium+python实现自动登录脚本
2018/04/22 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
企业元宵节主持词
2014/03/25 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
机关作风建设自查报告
2014/10/22 职场文书
2014年部门工作总结
2014/11/12 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
投标邀请书范本
2015/02/02 职场文书
2015年环保局工作总结
2015/05/22 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers