专注WEB开发 分享经验,沉淀知识

tp5使用$_GET获取不到数据?

 作者:chenxing  时间:2017-08-22 00:00  阅读:6083  评论:

我们探究为什么pathinfo中的参数$_GET无法正常获取?能产生这样疑问的朋友其实陷入tp3给我们带来的认知误区。

使用过tp5和tp3版本朋友,会发现tp5完全是thinkphp的一次重构。给我们的不是版本的升级,完全就是两个不同的框架嘛。如果用习惯了tp3,断崖式跳到了tp5,难免会不适应。

其中就有一个对$_GET这个全局变量的使用问题,在有些情况下,tp5无法使用$_GET获取数据?

如果你的请求的地址参数是以pathinfo形式,这样参数是无法用$_GET去获取的,同样也不能使用系统中的get方法。

比如:

//请求地址"http://www.xxx.com/index/user/uid/100"

public function user() {
    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'))//结果为空
}

以上方法都是tp5获取常见的get参数的获取方式,结果能验证上面的结论。我们再看看以下地址请求:


//请求地址为"http://www.xxx.com/index/user?uid=100"

public function user() {
    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,正常获取
}

这样普通传参方式,get方法和$_GET就能正常获取。我们再看看混合式地址方式

//请求地址为"http://www.xxx.com/index/user/uid/100?name=chenxing"
public function user() {
    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值
}

混合式地址比较乱,但在ajax请求时生成地址很有可能是这种混合式。

上面的三种请求参数地址在我们日常开发中比较常见,那么能够正常获取的请用系统的param方式获取,这个是最兼容的获取方式

回到问题,我们探究为什么pathinfo中的参数$_GET无法正常获取?能产生这样疑问的朋友其实陷入tp3给我们带来的认知误区。在tp3中上面的请求的三种方式都可以用$_GET获取其中的所有参数,久而久之你就习惯了这种写法,然后就把这种获取方式变成理所当然。我们撇开框架pathinfo地址同样无法用$_GET获取,对于地址中的get请求的参数必须是以”?“开始的。那么为什么tp3可以呢?因为tp3把pathinfo中的参数整合到了get请求中。

现在大家应该能够明白的感受到开头提到的tp3到tp5这种断崖式升级了吧。忘掉tp3,让tp5在我们手中快活的游走。

除特别注明外,本网站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 https://www.qiusuoweb.com/72.html

发布评论

 提交评论
有人回复时邮件通知我

 评论(0)

站长头像
chenxing(PHP攻城狮)

运营天数

总访问量

文章数量

-

-

-

交流群:157451741

新浪微博:草莽兴

 近期文章

一年时间又回到这里

 2019-07-27 16:54  38

PHP字符串转数组的三种场景

 2018-05-05 01:32  171

PHP如何遍历字符串?

 2018-05-04 00:56  744

api接口常见的安全问题和解决方案

 2018-05-03 23:20  685

 最新评论

 pagenoname: 08月24日 18:51
兴哥牛B加油哈兴哥成功的道路上你又进了一步 哈哈
来源: 一年时间又回到这里
 iceyxm: 05月16日 15:00
谜一样的问题,我也遇到了,能改的权限都改了,文件目录属主也改了,然而并没有作用
来源: thinkphp5的mkdir() Permission denied问题探讨
 potatog: 03月27日 15:02
厉害了厉害了,搞了半天我,
来源: thinkphp利用PHPExcel导出数据实践
 aaa: 02月10日 17:02
受教
来源: thinkphp如何有效的设置session过期时间
 风格: 01月17日 09:35
我也是没解决
来源: thinkphp5的mkdir() Permission denied问题探讨
 小胡: 01月14日 14:28
非常感谢!使用非常便捷~
来源: thinkphp利用PHPExcel导出数据实践