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,您将看到以下内容。
要检索其他请求方法(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() { //不带主机的 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,您将看到以下内容。
步骤 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,您将看到如以下代码所示的输出。
要获取客户端计算机的主机名和 IP 地址,请使用 userHost 和 userIP 属性。
步骤 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,您将看到以下屏幕。