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程序--记数器
Oct 09 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP内核探索之变量
Dec 22 PHP
微信支付开发发货通知实例
Jul 12 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
PHP goto语句用法实例
Aug 06 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 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
PHP5 安装方法
2006/10/09 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python中属性和描述符的正确使用
2016/08/23 Python
详解Python文本操作相关模块
2017/06/22 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
Ref与out有什么不同
2012/11/24 面试题
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
给老师的道歉信
2014/01/11 职场文书
导游个人求职信
2014/04/25 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书