天天看點

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在我們手中快活的遊走