为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel中同一页面下多个以上的列表需要分页的方法

标签:
PHP
    期初,最开始我遇到了这个问题,在网上查询了很久都没有答案,于是就静下心来看看laravel的整个分页的流程。

首先我们都是使用paginate()这个方法生成分页,在view页面中使用render()这个方法生成分页链接的,感觉laravel太好用了,都不用自己写分页及一些链接的处理。当我在页面增加两个列表的分页的时候问题出现了,我点击其中一个列表的分页链接的时候,另一个列表的数据都发生了变化,原来是都是用了同一个page,比如你的链接是user?page=1,两个列表都是用了这个page命名就会发生冲突。于是乎我网上搜索了一番,找到了可以使用setPageName()方法为不同的列表分页设定自己的pagename,我非常高兴的设定了这个值,也很有效的改变了这个原始的page为两个不同的命名,例如:user?upage=1user?ipage=1,我想这下问题该解决了吧!但是要命的来了,点击分页链接的时候内容并没有变化,怎么修改了之后还是没有用......

做到这个的时候感觉非常的恼火,也感觉到无助,不知怎么办。于是乎我静下心来看看laravel的分页是怎么一个流程,我于是沿着paginate()方法查询到在vender文件夹中找vender\laravel\framework\src\Illuminate\Pagination\Paginator目录下的Paginator.php,在里面看看各个方法之间的关系,寻源而上发现$pageName这个变量在LengthAwarePaginator.php中已被setPageName()方法所改变,但是为何url改变而内容却没有任何变化,我想那应该是url链接的数据不正确。

接着我发现![LengthAwarePaginator][1].php中找到构造函数中options数组中存在pageName参数,这不就是我设定的pageName变量么,我与是打印出来看看,打印出来还是page这个命名,于是我再向上查找,找到了Eloquent/Builder.php,看到里面有paginate这个方法,瞬间恍然大悟,setPageName()这个方法并没有改变查询数据的pagename,所以setPageName()只是在子类中的设置pagename的变化,而向上一层真正生成的分页中没有作用,于是我就在控制器中将paginate()方法增加两个参数,将第三个参数写成将要输入的pagename,再回到页面看看效果,结果大功告成!

修改方法:
例如:你使用的是User::paginate(2),这里只有一个参数,Builder.php里面有4个参数,第二个参数这里不做解释,第三个参数就是我们自定义的pagename,于是修改为User::paginate(2, '[*]', 'uPage');这就会将默认的page修改为uPage,并且页面的链接也正确!

Builder.php中的paginate方法:

点击查看更多内容
12人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消