terry_wang 2015-02-03 14:51:41 7461次浏览 6条回复 2 0 0

最近接手同事的项目,使用的框架为Yii。 有一事不明特向大家请教?

$age = Yii::app()->request->getQuery('age');
$level = Yii::app()->request->getQuery('level');
$tag = Yii::app()->request->getQuery('tag');

我看到程序中有很多这样的代码,通过getQuery来获取URL参数。 我直接使用$_GET也可以获取到URL参数,我想知道getQuery的意义何在? 不要告诉我可以带入一个默认值,那样没有意义,因为大多数情况下,我不需要这么做。

  • 回复于 2015-02-04 13:17 举报

    request里面有一些安全验证之类的。
    既然包装了一个request类当然和请求相关的东西里面都要包含了,对吧?
    $_GET和$_POST当然不例外了。
    就算换了你去写这样一个request类,你肯定也会这样包括这些东西。

    对于这些参数有没有过滤之类的,我没有看源代码不知道。
    我觉得是没有过滤的。
    应该是和直接用$_GET获得是一样的吧。

  • 回复于 2015-02-04 18:44 举报

    首先,带入默认值是一个比较common的需求,你不需要这么做可能只是一个特例。
    其次,(C)HttpRequest是对一个http请求的抽象,其中封装了与当前请求有关的所有内容。可能getQuery这种在你看来逻辑很简单,似乎多此一举,但是你可以去看看其他一些方法,比如getIsAjaxRequest,getRestParam, 甚至是看上去最直白的getUrl,其中封装了大量的细节,这些细节你是绝对不愿意在你的代码里一遍一遍的跟全局变量去死磕的。但是通过封装,HttpRequest暴露出一个统一的接口(或者说抽象,概念,属性,whatever),极大的方便了开发者。

    当然你们这样的代码也是不够优雅的。对于查询参数,可以直接在action的方法签名中去声明。对于post参数,如果数据的意义明确,最好是建立一个模型来统一收集,这样就不需要写一排一排的相似代码了。

    觉得很赞
  • 回复于 2015-02-05 10:46 举报

    一二三四五六七八

  • 回复于 2015-02-05 14:29 举报

    个人技术分享:http://xuemingjing.sinaapp.com

  • 回复于 2015-02-10 09:59 举报

    你在灌水,小心被封号。

  • 回复于 2015-02-28 17:08 举报

    安全过滤也是一方面, 默认是开启的防止跨站请求伪造

    觉得很赞
您需要登录后才可以回复。登录 | 立即注册