yii2 get post请求方法, url地址获取, HTTP头

时间: 2017-05-08  分类: Yii2  收藏
yii默认提供获取$_GET和$_POST值的方法,以及请求类型判断,url地址参数信息获取等.使用起来很方便,当然系统$_GET $_POST还是可以用,
注:不能相信任何用户提交的任何参数值,以免出现安全问题, 如get参数id=5, 用户访问的时候id不一定等于5

GET POST请求参数获取
要获取请求参数,可以调用 request 组件的 yii\web\Request::get() 方法和 yii\web\Request::post() 方法。这两个方法分别返回 $_GET$_POST 的值。

Yii::$app->request->get();          // 即 $_GET;

Yii::$app->request->get('id');      //即 $id = isset($_GET['id']) ? $_GET['id'] : null;

Yii::$app->request->get('id', 1);   // 即 $id = isset($_GET['id']) ? $_GET['id'] : 1; 不存在值默认为1

Yii::$app->request->post();         // 即 $_POST;

Yii::$app->request->post('name');           // 即 $name = isset($_POST['name']) ? $_POST['name'] : null;

Yii::$app->request->post('name', 'aaa');   // 即 $name = isset($_POST['name']) ? $_POST['name'] : 'aaa';

建议像上面这样通过 request 组件来获取请求参数,而不是直接访问 $_GET 和 $_POST。 这使更容易编写测试实例,因为可以伪造数据来创建一个模拟请求组件。

当实现 RESTful API 接口的时候,经常需要获取通过PUT  PATCH或者其他的 request methods 请求方法提交的参数。可以通过调用 yii\web\Request::getBodyParam() 方法来获取参数。如:

$params = Yii::$app->request->bodyParams; // 所有参数

$param = Yii::$app->request->getBodyParam('id'); // 参数 id

不同于 GET 参数,POST PUT PATCH 等等这些提交的参数是在请求体中被发送的。 当通过上面介绍的方法访问这些参数的时候,request 会解析这些参数。 可以通过配置 yii\web\Request::parsers 属性自定义怎样解析这些参数

请求方法
可以通过 Yii::$app->request->method 表达式获取当前请求使用的HTTP方法,  yii2还提供了一套布尔属性用于检测当前请求是某种类型。 如:

if (Yii::$app->request->isAjax) { /* 该请求是一个 AJAX 请求 */ }
if (Yii::$app->request->isGet)  { /* 请求方法是 GET */ }
if (Yii::$app->request->isPost) { /* 请求方法是 POST */ }
if (Yii::$app->request->isPut)  { /* 请求方法是 PUT */ }

URL地址获取

假设被请求URL是 http://example.com/admin/index.php/product?id=100

Yii::$app->request->url;
    //返回 /admin/index.php/product?id=100, 此URL不包括host info部分。

Yii::$app->request->absoluteUrl;
    //返回 http://example.com/admin/index.php/product?id=100, 包含host infode的整个URL。

Yii::$app->request->hostInfo;
    //返回 http://example.com, 只有host info部分。

Yii::$app->request->pathInfo;
    //返回 /product, 这个是入口脚本之后,问号之前(查询字符串)的部分。

Yii::$app->request->queryString;
    //返回 id=100,问号之后的部分。

Yii::$app->request->baseUrl;
    //返回 /admin, host info之后, 入口脚本之前的部分。

Yii::$app->request->scriptUrl;
    //返回 /admin/index.php, 没有path info和查询字符串部分。

Yii::$app->request->serverName;
    //返回 example.com, URL中的host name。

Yii::$app->request->serverPort;
    //返回 80, 这是web服务中使用的端口。


 HTTP头
可以通过 yii\web\Request::headers 属性返回的 yii\web\HeaderCollection 获取HTTP头信息。 例如:

// $headers 是一个 yii\web\HeaderCollection 对象
$headers = Yii::$app->request->headers;

// 返回 Accept header 值
$accept = $headers->get('Accept');

if ($headers->has('User-Agent')) { /* 这是一个 User-Agent 头 */ }


请求组件提供了支持快速访问常用头的方法:

Yii::$app->request->userAgent;
    //返回 User-Agent 头。
Yii::$app->request->contentType;
    //返回 Content-Type 头的值, Content-Type 是请求体中MIME类型数据。
Yii::$app->request->acceptableContentTypes;
    //返回用户可接受的内容MIME类型。 返回的类型按照他们的质量得分排序。得分最高的类型最先返回。
Yii::$app->request->acceptableLanguages;
    //返回用户可接受的语言。 返回的语言按照他们的偏好层次排序。第一个参数代表最优先的语言。

假如应用支持多语言,并且想在终端用户最喜欢的语言中显示页面, 可以使用语言协商方法 yii\web\Request::getPreferredLanguage()。 这个方法通过 yii\web\Request::acceptableLanguages 在应用中所支持的语言列表里进行比较筛选,返回最适合的语言。

客户端信息
可以通过 yii\web\Request::userHost 和 yii\web\Request::userIP 分别获取host name和客户机的IP地址

$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;

分享到:

评论

昵 称: