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 −现在转到 http://localhost:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome,您将看到以下内容。

actionTestGet Function Output

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

要获取当前请求的 HTTP 方法,请使用 Yii::$app→re​​quest→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 − 转到 http://localhost:8080/index.php?r=site/test-get。您将看到以下内容。

获取请求

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

步骤 5 − 修改 actionTestGet 函数如下。

public function actionTestGet() {
    //不带主机的 URL
    var_dump(Yii::$app->request->url);
    
    //包括主机路径的整个 URL
    var_dump(Yii::$app->request->absoluteUrl);
    
    //URL 的主机
    var_dump(Yii::$app->request->hostInfo);
    
    //入口脚本之后、问号之前的部分
    var_dump(Yii::$app->request->pathInfo);
    
    //问号之后的部分
    var_dump(Yii::$app->request->queryString);
    
    //主机之后、入口脚本之前的部分
    var_dump(Yii::$app->request->baseUrl);
    
    //不包含路径信息和查询字符串的 URL
    var_dump(Yii::$app->request->scriptUrl);
    
    //URL 中的主机名
    var_dump(Yii::$app->request->serverName);
    
    //Web 服务器使用的端口
    var_dump(Yii::$app->request->serverPort);
}

步骤 6 − 在 Web 浏览器的地址栏中输入 http://localhost:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome,您将看到以下内容。

修改 Actiontestget 函数输出

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

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

步骤 8 − 如果您访问 URL http://localhost:8080/index.php?r=site/testget&id=1&name=tutorialspoint&message=welcome,您将看到如以下代码所示的输出。

Modified Actiontestget Function Output

要获取客户端计算机的主机名和 IP 地址,请使用 userHostuserIP 属性。

步骤 9 −按照这种方式修改 actionTestGet 函数。

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

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

actionTestGet 函数输出屏幕