yii默認提供獲取$_GET和$_POST值的方法,以及請求類型判斷,url地址參數信息獲取等.使用起來很方便,當然系統$_GET $_POST還是可以用,
注:不能相信任何用戶提交的任何參數值,以免出現安全問題, 如get參數id=5, 用戶訪問的時候id不一定等於5。
GET POST請求參數獲取
要獲取請求參數,可以調用 request
組件的 yii\web\Request::get() 方法和 yii\web\Request::post() 方法。這兩個方法分別返回 $_GET
和 $_POST
的值。
Yii::$app->request->get(); // 即 $_GET;
Yii::$app->request->get('id'); //即 $id = isset($_GET['id']) ? $_GET['id'] : null;
Yii::$app->request->get('id', 1); // 即 $id = isset($_GET['id']) ? $_GET['id'] : 1; 不存在值默認為1
Yii::$app->request->post(); // 即 $_POST;
Yii::$app->request->post('name'); // 即 $name = isset($_POST['name']) ? $_POST['name'] : null;
Yii::$app->request->post('name', 'aaa'); // 即 $name = isset($_POST['name']) ? $_POST['name'] : 'aaa';
建議像上面這樣通過 request 組件來獲取請求參數,而不是直接訪問 $_GET 和 $_POST。 這使更容易編寫測試實例,因為可以偽造數據來創建一個模擬請求組件。
請求方法
可以通過 Yii::$app->request->method
表達式獲取當前請求使用的HTTP方法, yii2還提供了一套布爾屬性用於檢測當前請求是某種類型。 如:
if (Yii::$app->request->isAjax) { /* 該請求是一個 AJAX 請求 */ }
if (Yii::$app->request->isGet) { /* 請求方法是 GET */ }
if (Yii::$app->request->isPost) { /* 請求方法是 POST */ }
if (Yii::$app->request->isPut) { /* 請求方法是 PUT */ }
URL地址獲取
假設被請求URL是 http://example.com/admin/index.php/product?id=100
Yii::$app->request->url;
//返回 /admin/index.php/product?id=100, 此URL不包括host info部分。
Yii::$app->request->absoluteUrl;
//返回 http://example.com/admin/index.php/product?id=100, 包含host infode的整個URL。
Yii::$app->request->hostInfo;
//返回 http://example.com, 只有host info部分。
Yii::$app->request->pathInfo;
//返回 /product, 這個是入口腳本之后,問號之前(查詢字符串)的部分。
Yii::$app->request->queryString;
//返回 id=100,問號之后的部分。
Yii::$app->request->baseUrl;
//返回 /admin, host info之后, 入口腳本之前的部分。
Yii::$app->request->scriptUrl;
//返回 /admin/index.php, 沒有path info和查詢字符串部分。
Yii::$app->request->serverName;
//返回 example.com, URL中的host name。
Yii::$app->request->serverPort;
//返回 80, 這是web服務中使用的端口。
HTTP頭
可以通過 yii\web\Request::headers 屬性返回的 yii\web\HeaderCollection 獲取HTTP頭信息。 例如:
// $headers 是一個 yii\web\HeaderCollection 對象
$headers = Yii::$app->request->headers;
// 返回 Accept header 值
$accept = $headers->get('Accept');
if ($headers->has('User-Agent')) { /* 這是一個 User-Agent 頭 */ }
假如應用支持多語言,並且想在終端用戶最喜歡的語言中顯示頁面, 可以使用語言協商方法 yii\web\Request::getPreferredLanguage()。 這個方法通過 yii\web\Request::acceptableLanguages 在應用中所支持的語言列表里進行比較篩選,返回最適合的語言
轉轉地址:http://www.inpy.cn/news/151.html