首先我们都是使用paginate()这个方法生成分页,在view页面中使用render()这个方法生成分页链接的,感觉laravel太好用了,都不用自己写分页及一些链接的处理。当我在页面增加两个列表的分页的时候问题出现了,我点击其中一个列表的分页链接的时候,另一个列表的数据都发生了变化,原来是都是用了同一个page,比如你的链接是user?page=1,两个列表都是用了这个page命名就会发生冲突。于是乎我网上搜索了一番,找到了可以使用setPageName()方法为不同的列表分页设定自己的pagename,我非常高兴的设定了这个值,也很有效的改变了这个原始的page为两个不同的命名,例如:user?upage=1和user?ipage=1,我想这下问题该解决了吧!但是要命的来了,点击分页链接的时候内容并没有变化,怎么修改了之后还是没有用……
我于是沿着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,并且页面的链接也正确!
总结:一般paginate传一个参数,即指定每页的显示条数,页码这个参数名叫 ‘page’ ,当传第三个参数时可以去修改。
作者:金星show
链接:http://www.jianshu.com/p/89e90438aaaf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
来自 https://blog.csdn.net/lingchen__/article/details/78468654