Yii - HTTP 请求



请求由 **yii\web\Request** 对象表示,该对象提供有关 HTTP 标头、请求参数、Cookie 等的信息。

方法 **get()** 和 **post()** 返回请求组件的请求参数。

**示例** -

$req = Yii::$app->request;
   /*
   * $get = $_GET;
   */
   $get = $req->get();

   /*
   * if(isset($_GET['id'])) {
   *     $id = $_GET['id'];
   * } else {
   *     $id = null;
   * }
   */
   $id = $req->get('id');
	
   /*
   * if(isset($_GET['id'])) {
   *     $id = $_GET['id'];
   * } else {
   *     $id = 1;
   * }
   */
   $id = $req->get('id', 1);
	
   /*
   * $post = $_POST;
	*/
   $post = $req->post();

   /*
   * if(isset($_POST['name'])) {       
   *     $name = $_POST['name'];          
   * } else {
   *     $name = null;
   * }
   */
   $name = $req->post('name');
		  
   /*
   * if(isset($_POST['name'])) {
   *     $name = $_POST['name'];
   * } else {
   *     $name = '';
   * }
   */
   $name = $req->post('name', '');

**步骤 1** - 在基本应用程序模板的 **SiteController** 中添加 **actionTestGet** 函数。

public function actionTestGet() {
   var_dump(Yii::$app->request->get());
}

**步骤 2** - 现在转到 **https://127.0.0.1:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome**,您将看到以下内容。

actionTestGet Function Output

要检索其他请求方法(PATCH、DELETE 等)的参数,请使用 **yii\web\Request::getBodyParam()** 方法。

要获取当前请求的 HTTP 方法,请使用 **Yii::$app→request→method** 属性。

**步骤 3** - 按如下所示修改 **actionTestGet** 函数。

public function actionTestGet() {
   $req = Yii::$app->request;
   if ($req->isAjax) {
      echo "the request is AJAX";
   }
   if ($req->isGet) {
      echo "the request is GET";
   }
   if ($req->isPost) {
      echo "the request is POST";
   }
   if ($req->isPut) {
      echo "the request is PUT";
   }
}

**步骤 4** - 转到 **https://127.0.0.1:8080/index.php?r=site/test-get**。您将看到以下内容。

Get Request

请求组件提供了许多属性来检查请求的 URL。

**步骤 5** - 按如下所示修改 **actionTestGet** 函数。

public function actionTestGet() {
   //the URL without the host
   var_dump(Yii::$app->request->url);
   
   //the whole URL including the host path
   var_dump(Yii::$app->request->absoluteUrl);
   
   //the host of the URL
   var_dump(Yii::$app->request->hostInfo);
   
   //the part after the entry script and before the question mark
   var_dump(Yii::$app->request->pathInfo);
   
   //the part after the question mark
   var_dump(Yii::$app->request->queryString);
   
   //the part after the host and before the entry script
   var_dump(Yii::$app->request->baseUrl);
   
   //the URL without path info and query string
   var_dump(Yii::$app->request->scriptUrl);
   
   //the host name in the URL
   var_dump(Yii::$app->request->serverName);
   
   //the port used by the web server
   var_dump(Yii::$app->request->serverPort);
}

**步骤 6** - 在网页浏览器的地址栏中,键入 **https://127.0.0.1:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome**,您将看到以下内容。

Modify Actiontestget Function Output

**步骤 7** - 要获取 HTTP 标头信息,您可以使用 **yii\web\Request::$headers** 属性。按此方式修改 **actionTestGet** 函数。

public function actionTestGet() { 
   var_dump(Yii::$app->request->headers); 
}

**步骤 8** - 如果您转到 URL **https://127.0.0.1:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome**,您将看到如下所示的输出。

Modified Actiontestget Function Output

要获取客户端机器的主机名和 IP 地址,请使用 **userHost** 和 **userIP** 属性。

**步骤 9** - 按此方式修改 **actionTestGet** 函数。

public function actionTestGet() {
   var_dump(Yii::$app->request->userHost);
   var_dump(Yii::$app->request->userIP);
}

**步骤 10** - 转到地址 **https://127.0.0.1:8080/index.php?r=site/test-get**,您将看到以下屏幕。

actionTestGet Function Output Screen
广告