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 n个不重复的随机数生成代码
Jun 23 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
php图片添加水印例子
Jul 20 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP fopen函数用法实例讲解
Feb 15 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
Laravel5.1 框架路由基础详解
Jan 04 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 PHP
PHP判断是否是json字符串
Apr 01 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/05/11 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
vue 弹出遮罩层样式实例
2020/07/22 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
python编程培训 python培训靠谱吗
2018/01/17 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
python logging日志模块原理及操作解析
2019/10/12 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
Python用SSH连接到网络设备
2021/02/18 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
预备党员综合考察材料
2014/05/31 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
天堂的孩子观后感
2015/06/11 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
Redis实现订单过期删除的方法步骤
2022/06/05 Redis
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL