[Yii2笔记]031请求(Requests) [ 技术分享 ]
说明
学习Yii Framework 2(易2框架)的过程是漫长的,也是充满乐趣的,以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现,提供了较完整的代码,供你参考。不妥之处,请多多指正!
原文网址:
http://www.yiiframework.com/doc-2.0/guide-runtime-requests.html
本文主题:请求(Requests)
发送到一个应用的请求使用yii\web\Request对象来表示,此对象提供了诸如请求参数、HTTP头、Cookie等信息,对于一个给定的请求,默认的,你可以使用request应用组件(yii\web\Request的实例)获取对应的请求对象。在本节,我们将描述如何在应用中使用此组件。
1、请求参数(Request Parameters)
要获取请求参数,你可以调用request的get()或post()方法,他们分别返回$_GET 和$_POST ,例如:
//request
$request=Yii::$app->request;
//get
$get=$request->get();
//等效于$get=$_GET;
$id=$request->get('id');
//等效于$id=isset($_GET['id'])?$_GET['id']:null;
$id=$request->get('id',1);
//等效于$id=isset($_GET['id'])?$_GET['id']:1;
//post
$post=$request->post();
//等效于$post=$_POST;
$name=$request->post('name');
//等效于$name=isset($_POST['name'])?$_POST['name']:null;
$name=$request->post('name','');
//等效于$name=isset($_POST['name'])?$_POST['name']:'';
信息:与直接使用$_GET 和$_POST 处理请求参数相比,更推荐你使用如上的request组件,因为这样检测仿冒的请求数据会更容易。 在实现RESTful API时,你经常会处理使用PUT、PATCH或其他请求方法获取到的参数,你可以调用yii\web\Request::getBodyParam()方法来获取这些参数,例如:
$request=Yii::$app->request;
//获取所有参数
$params=$request->bodyParams;
//获取参数id
$id=$request->getBodyParam('id');
信息:与GET参数不同,使用POST、PUT、PATCH等方法提交的参数是发送到request的body中的,当你获取这些参数时,request组件将解析它们,你可以通过配置yii\web\Request::$parsers 属性来自定义参数解析方法。
2、请求方法(Request Methods)
使用表达式Yii::$app->request->method,你可以获取当前请求使用的HTTP方法,还有一系列的布尔属性可以用于检测当前方法是否是特定类型,例如:
$request=Yii::$app->request;
if($request->isAjax){
}
if($request->isGet){
}
if($request->isPost){
}
if($request->isPut){
}
3、请求网址(Request URLs)
request组件提供了很多方法用于检测当前请求的URL。 假定当前请求的URL是http:/ /example.com/admin/index.php/product?id=100,你可以获取此URL的各个部分,汇总如下: url:返回/admin/index.php/product?id=100,不包含主机信息的URL absoluteUrl,返回http:/ /example.com/admin/index.php/product?id=100,包含主机信息的完整URL。 hostInfo,返回http:/ /example.com pathInfo,返回/product queryString,返回id=100 baseUrl,返回/admin scriptUrl,返回/admin/index.php serverName,返回example.com serverPort,返回80
$request=Yii::$app->request;
$url=$request->absoluteUrl;
echo "<br>url:".$url;
测试结果:
/*
url:http://localhost:8082/post/view
*/
4、HTTP头(HTTP Headers)
你可以通过yii\web\Request::$headers 属性返回的头信息获取HTTP头信息,例如:
// $headers is an object of yii\web\HeaderCollection
$headers = Yii::$app->request->headers;
// returns the Accept header value
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) {
echo "has user agent!<br>";
/* there is User-Agent header */ }
echo "<br>accept:".$accept;
测试结果:
http://localhost:8082/post/view?a=3&b=5
/*
has user agent!
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,* /*;q=0.8
*/
request组件也提供了快速获取常用头信息的属性,包括: userAgent,返回User-Agent头信息 contentType,返回Content-Type头信息,描述了请求的MIME类型 acceptableContentTypes,返回用户可接受的MIME类型,返回类型按照质量得分来排序,类型具有最高记录的将先返回。 acceptableLanguages,返回用户可以接受的语言,返回语言按照喜好级别排序,第一个元素代表被喜好最多的语言。
如果你的应用支持多语言,你想要使用客户喜好的语言显示页面,你可以使用语言转换方法 yii\web\Request::getPreferedLanguage(),此方法将获取应用所支持的语言列表,与acceptableLanguages相比较,并返回最合适的语言。 小贴士:你可以使用CotentNegotiator过滤器去动态决定哪种内容类型和语言将被使用,此过滤器在前文所述的属性和方法之上实现内容转换。
5、Client Information
你可以通过userHost和userIP分别获取客户机器的主机名和IP地址,例如:
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;
echo "<br>userHost:".$userHost;
echo "<br>userIP:".$userIP;
测试结果:
/*
userHost:
userIP:::1
*/
(全文完)
共 0 条回复
阿江
最后登录:2024-03-03
在线时长:186小时21分
- 粉丝94
- 金钱16816
- 威望160
- 积分20276