阿江 2017-10-05 06:19:04 2009次浏览 0条回复 0 0 0

说明

学习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
*/

(全文完)

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册