发布于 2015-08-01 11:18:24 | 432 次阅读 | 评论: 0 | 来源: 网络整理
Requests made to an application are represented in terms of yiiwebRequest objects which provide information such as request parameters, HTTP headers, cookies, etc. For a given request, you can get access to the corresponding request object via the request
application component which is an instance of yiiwebRequest, by default. In this section, we will describe how you can make use of this component in your applications.
To get request parameters, you can call yiiwebRequest::get() and yiiwebRequest::post() methods of the request
component. They return the values of $_GET
and $_POST
, respectively. For example,
$request = Yii::$app->request;
$get = $request->get();
// equivalent to: $get = $_GET;
$id = $request->get('id');
// equivalent to: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);
// equivalent to: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post();
// equivalent to: $post = $_POST;
$name = $request->post('name');
// equivalent to: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', '');
// equivalent to: $name = isset($_POST['name']) ? $_POST['name'] : '';
Info: Instead of directly accessing
$_GET
and$_POST
to retrieve the request parameters, it is recommended that you get them via therequest
component as shown above. This will make writing tests easier because you can create a mock request component with faked request data.
When implementing RESTful APIs, you often need to retrieve parameters that are submitted via PUT, PATCH or other request methods. You can get these parameters by calling the yiiwebRequest::getBodyParam() methods. For example,
$request = Yii::$app->request;
// returns all parameters
$params = $request->bodyParams;
// returns the parameter "id"
$param = $request->getBodyParam('id');
Info: Unlike
GET
parameters, parameters submitted viaPOST
,PUT
,PATCH
etc. are sent in the request body. Therequest
component will parse these parameters when you access them through the methods described above. You can customize the way how these parameters are parsed by configuring the yiiwebRequest::parsers property.
You can get the HTTP method used by the current request via the expression Yii::$app->request->method
. A whole set of boolean properties are also provided for you to check if the current method is of certain type. For example,
$request = Yii::$app->request;
if ($request->isAjax) { // the request is an AJAX request }
if ($request->isGet) { // the request method is GET }
if ($request->isPost) { // the request method is POST }
if ($request->isPut) { // the request method is PUT }
The request
component provides many ways of inspecting the currently requested URL.
Assuming the URL being requested is http://example.com/admin/index.php/product?id=100
, you can get various parts of this URL as summarized in the following:
/admin/index.php/product?id=100
, which is the URL without the host info part.http://example.com/admin/index.php/product?id=100
, which is the whole URL including the host info part.http://example.com
, which is the host info part of the URL./product
, which is the part after the entry script and before the question mark (query string).id=100
, which is the part after the question mark./admin
, which is the part after the host info and before the entry script name./admin/index.php
, which is the URL without path info and query string.example.com
, which is the host name in the URL.You can get the HTTP header information through the yiiwebHeaderCollection returned by the yiiwebRequest::headers property. For example,
// $headers is an object of yiiwebHeaderCollection
$headers = Yii::$app->request->headers;
// returns the Accept header value
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { // there is User-Agent header }
The request
component also provides support for quickly accessing some commonly used headers, including:
User-Agent
header.Content-Type
header which indicates the MIME type of the data in the request body.If your application supports multiple languages and you want to display pages in the language that is the most preferred by the end user, you may use the language negotiation method yiiwebRequest::getPreferredLanguage(). This method takes a list of languages supported by your application, compares them with yiiwebRequest::acceptableLanguages, and returns the most appropriate language.
Tip: You may also use the yiifiltersContentNegotiator filter to dynamically determine what content type and language should be used in the response. The filter implements the content negotiation on top of the properties and methods described above.
You can get the host name and IP address of the client machine through yiiwebRequest::userHost and yiiwebRequest::userIP, respectively. For example,
$userHost = Yii::$app->request->userHost;
$userIP = Yii::$app->request->userIP;