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 clearstatcache()函数详解
Mar 02 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
PHP设计模式之结构模式的深入解析
Jun 13 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
PHP随机数 C扩展随机数
May 04 PHP
基于swoole实现多人聊天室
Jun 14 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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生成月历代码
2007/06/14 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
Python 互换字典的键值对实例
2019/02/12 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
在家更换处方镜片:Lensabl
2019/05/01 全球购物
销售代表求职自荐信
2013/10/01 职场文书
高中语文教学反思
2014/01/16 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书