Laravel 手动分页实现
Laravel 手动分页实现
基于5.2版本
在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示。Laravel官方提供了一个简单的方式paginate($perPage),但是这种方法只适用model、查询构建器。
今天说下 给定一个数组如何实现 和paginate方法一样的效果。
查看paginate方法源码
#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480 public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
{
$query = $this->toBase(); $total = $query->getCountForPagination(); $this->forPage(
$page = $page ?: Paginator::resolveCurrentPage($pageName),
$perPage = $perPage ?: $this->model->getPerPage()
); return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
从上面就可以看出,分页的关键就在于LengthAwarePaginator。
LengthAwarePaginator的构造方法。
public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
{
foreach ($options as $key => $value) {
$this->{$key} = $value;
} $this->total = $total;
$this->perPage = $perPage;
$this->lastPage = (int) ceil($total / $perPage);
$this->path = $this->path != '/' ? rtrim($this->path, '/') : $this->path;
$this->currentPage = $this->setCurrentPage($currentPage, $this->lastPage);
$this->items = $items instanceof Collection ? $items : Collection::make($items);
}
其实已经很明白了,假如要分页的数组为
[
['username'=>'zhangsan', 'age'=>26],
['username'=>'lisi', 'age'=>23],
['username'=>'wangwu', 'age'=>62],
['username'=>'zhaoliu', 'age'=>46],
['username'=>'wangmazi', 'age'=>25],
['username'=>'lanzi', 'age'=>24],
['username'=>'pangzi', 'age'=>21],
]
共7条数据,每页显示3条,共3页
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Http\Request;
# 仅做演示 #
function userList(Request $request) {
$users = [
['username'=>'zhangsan', 'age'=>26],
['username'=>'lisi', 'age'=>23],
['username'=>'wangwu', 'age'=>62],
['username'=>'zhaoliu', 'age'=>46],
['username'=>'wangmazi', 'age'=>25],
['username'=>'lanzi', 'age'=>24],
['username'=>'pangzi', 'age'=>21]
]; $perPage = 3;
if ($request->has('page')) {
$current_page = $request->input('page');
$current_page = $current_page <= 0 ? 1 :$current_page;
} else {
$current_page = 1;
} $item = array_slice($users, ($current_page-1)*$perPage, $perPage); //注释1
$total = count($users); $paginator =new LengthAwarePaginator($item, $total, $perPage, $currentPage, [
'path' => Paginator::resolveCurrentPath(), //注释2
'pageName' => 'page',
]); $userlist = $paginator->toArray()['data']; return view('userlist', compact('userlist', 'paginator'));
}
上面的代码中的重点是$item,如果不做注释1处理,得出的是所有7条数据。
注释2处就是设定个要分页的url地址。也可以手动通过 $paginator ->setPath(‘路径’) 设置。
页面中的分页连接也是同样的调用方式 {{ $paginator->render() }}
好了,基本就是这样,有纰漏的地方欢迎指正!
转:https://blog.csdn.net/hxx_yang/article/details/51753134
Laravel 手动分页实现的更多相关文章
- Laravel手动分页的方法
use Illuminate\Pagination\LengthAwarePaginator; public function index(Request $request){ $list =[... ...
- 关于laravel 得手动分页问题
一般得分页,我们只需要使用paginate方法,就可以简单得搞定.但是遇到数组得组合情况呢?这个时候,就需要我们使用自定义分页了.首先我们看下laravel得分页方法源码: #vendor/larav ...
- laravel带条件查询手动分页
后台php代码: //手动分页 $users = $kaoqin; //打算输出的数组,二维 $perPage = 10; if ($request->has('page')) { $curre ...
- laravel二维数组手动分页显示
示例:数组 $user 如下 $user: array (size=) 'sort' => array (size=) => float 0.028616622341171 => f ...
- 对一个结果集(List)进行手动分页
对一个链表List,进行手动分页,核心代码就是pagin函数: import lombok.extern.slf4j.Slf4j; import org.junit.Before; import or ...
- java手动分页处理
经常我们在操作数据库的时候都会用到分页,而且很多框架也提供了分页功能,像PageHelper. 但是在有些项目中,需要将数据查询出来进行手动分页,那么原理是什么呢? 其实很简单,首先需要知道数据总量, ...
- 纯js手动分页
昨天让做个页面,后台提供所有数据,没有做好分页,需要前端js手动分页. 我参考了 http://www.cnblogs.com/jiechn/p/4095029.html 做了些许改动让分页效果更加完 ...
- 关于laravel框架分页报错的问题
因为laravel框架有自己的分页封装,所以与其他框架相比laravel框架的分页的实现要方便的多 只要分别在php脚本与视图中使用 $data=DB::table('index_pic')-> ...
- laravel手动数组分页
laravel文档中已经有写如何自己使用分页类去分页了,但没有详细说明. 如果你想手动创建分页实例并且最终得到一个数组类型的结果,可以根据需求来创建 IlluminatePaginationPagin ...
随机推荐
- Educational Codeforces Round 9 A. Grandma Laura and Apples 水题
A. Grandma Laura and Apples 题目连接: http://www.codeforces.com/contest/632/problem/A Description Grandm ...
- mac下使用github 上传代码
提起github相信大家都不会陌生,在这里就不再赘述了.作为开源代码库以及版本控制系统,使用好了确实会非常受益,再说的势利点,你找工作时给面试官说你经常维护自己的技术博客和github,相信你给他的印 ...
- iOS .a静态库的制作及使用
一.制作.a静态库 1.创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK.
- Android——Activity and Service
参考博客:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html http://www.cnblogs.com/feisky/ar ...
- “Warning: Call-time pass-by-reference has been deprecated in”解决方法
刚刚在调试一个PHP木马,显示错误信息为: Warning: Call-time pass-by-reference has been deprecated in E:\New-Hack520org\ ...
- MYSQL复习笔记10-连接
Date: 20140219Auth: Jin 一.介绍连接是二元运算,可以对两个表或多个表进行查询.T-SQL中分两大类,一是符合SQL标准的连接谓词表示形式,二是T-SQL扩展的使用关键字JOIN ...
- [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】
记录了安全测试过程中发现的一些典型的安全问题 YS忘记密码机制存在缺陷,可导致任意用户口令被修改[高] 问题描述: YS网站提供用户密码修改功能,当用户忘记密码时可通过该功能找回密码,但该修改密码的流 ...
- JIRA Service Desk 3.9.2 没有许可证
https://my.atlassian.com/license/evaluation Server ID BFHT-0XFL-3NM8-3KRF SEN SEN-L10880225 License ...
- 封装log4cp p
log4cpp 是参考 log4j 所写的 c++ 版本的写 log 的库.可以在这里下载 http://log4cpp.sourceforge.net/ 我的使用方法是: 1,定义了一个 _ ...
- 项目中集成Easyui-Tree,可拖拽更新节点
由于公司架构较旧,使用的jdk版本为1.4,页面上也没有el表达式. Html <ul class="easyui-tree" id="data"> ...