laravel分頁修改默認的page參數

首先我們都是使用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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章