期初,最开始我遇到了这个问题,在网上查询了很久都没有答案,于是就静下心来看看laravel的整个分页的流程。
首先我们都是使用paginate()
这个方法生成分页,在view页面中使用render()
这个方法生成分页链接的,感觉laravel太好用了,都不用自己写分页及一些链接的处理。当我在页面增加两个列表的分页的时候问题出现了,我点击其中一个列表的分页链接的时候,另一个列表的数据都发生了变化,原来是都是用了同一个page,比如你的链接是user?page=1
,两个列表都是用了这个page命名就会发生冲突。于是乎我网上搜索了一番,找到了可以使用setPageName()
方法为不同的列表分页设定自己的pagename,我非常高兴的设定了这个值,也很有效的改变了这个原始的page为两个不同的命名,例如:user?upage=1
和user?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方法:
共同学习,写下你的评论
评论加载中...
作者其他优质文章