tp5使用$_GET獲取不到數據


使用過tp5和tp3版本朋友,會發現tp5完全是thinkphp的一次重構。給我們的不是版本的升級,完全就是兩個不同的框架嘛。如果用習慣了tp3,斷崖式跳到了tp5,難免會不適應。

其中就有一個對$_GET這個全局變量的使用問題,在有些情況下,tp5無法使用$_GET獲取數據?

如果你的請求的地址參數是以pathinfo形式,這樣參數是無法用$_GET去獲取的,同樣也不能使用系統中的get方法。
//請求地址"http://www.xxx.com/index/user/uid/100"
   print_r($_GET['uid']);//獲取不uid,會丟出一個異常
    print_r(input('get.uid'))//結果為空
    print_r(input('id'))//ok,正常獲取
    print_r(input('param.id'))//ok,正常獲取
    print_r(Request::instance()->param('id'))//ok,正常獲取
    print_r(Request::instance()->get('id'))//結果為空

//請求地址為"http://www.xxx.com/index/user?uid=100"
    print_r($_GET['uid']);//ok,正常獲取
    print_r(input('get.uid'))//ok,正常獲取
    print_r(input('id'))//ok,正常獲取
    print_r(input('param.id'))//ok,正常獲取
    print_r(Request::instance()->param('id'))//ok,正常獲取
    print_r(Request::instance()->get('id'))//ok,正常獲取
//請求地址為"http://www.xxx.com/index/user/uid/100?name=chenxing"
    print_r($_GET);//只能獲取name值
    print_r(input('get.'))//只能獲取name值
    print_r(input(''))//ok,正常獲取所以值
    print_r(input('param.'))//ok,正常獲取所以值
    print_r(Request::instance()->param(''))//ok,正常獲取所以值
    print_r(Request::instance()->get(''))//只能獲取name值
上面的三種請求參數地址在我們日常開發中比較常見,那么能夠正常獲取的請用系統的param方式獲取,這個是最兼容的獲取方式

回到問題,我們探究為什么pathinfo中的參數$_GET無法正常獲取?能產生這樣疑問的朋友其實陷入tp3給我們帶來的認知誤區。在tp3中上面的請求的三種方式都可以用$_GET獲取其中的所有參數,久而久之你就習慣了這種寫法,然后就把這種獲取方式變成理所當然。我們撇開框架pathinfo地址同樣無法用$_GET獲取,對於地址中的get請求的參數必須是以”?“開始的。那么為什么tp3可以呢?因為tp3把pathinfo中的參數整合到了get請求中。

現在大家應該能夠明白的感受到開頭提到的tp3到tp5這種斷崖式升級了吧。忘掉tp3,讓tp5在我們手中快活的游走
【轉載】https://blog.csdn.net/Monster_hobo/article/details/80206491


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM