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 步- 将 actionTestGet 函数添加基本应用程序模板的SiteController
    
    public function actionTestGet() {
       var_dump(Yii::$app->request->get());
    }
    
    第 2 步- 现在转到http://localhost:8080/index.php?r=site/testget&id=1&name=jc2182&message=welcome,您将看到以下内容。
    actionTestGet 函数输出
    要检索其他请求方法(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 步- 转到http://localhost:8080/index.php?r=site/test-get。您将看到以下内容。
    获取请求
    请求组件提供了许多属性来检查请求的 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 步- 在 Web 浏览器的地址栏中,键入http://localhost:8080/index.php?r=site/testget&id=1&name=jc2182&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=jc2182&message=welcome,您将看到如下代码所示的输出。
    修改后的 actiontestget 函数输出
    要获取客户端计算机的主机名和 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 函数输出屏幕