# 請求
[TOC]
## 請求參數
~~~
$request = \Yii::$app->request; // 獲取Yii請求組件
$get = $request->get();
// 等價于: $get = $_GET;
$id = $request->get('id');
// 獲取$_GET參數中的id的值。等價于: $id = isset($_GET['id']) ? $_GET['id'] : null;
$id = $request->get('id', 1);
// 等價于: $id = isset($_GET['id']) ? $_GET['id'] : 1;
$post = $request->post();
// 等價于: $post = $_POST;
$name = $request->post('name');
// 等價于: $name = isset($_POST['name']) ? $_POST['name'] : null;
$name = $request->post('name', 'zhangsan');
// 獲取post請求中的title的值。等價于: $name = isset($_POST['name']) ? $_POST['name'] : 'zhangsan';
~~~
## 請求方法
~~~
$request = \Yii::$app->request; // 獲取Yii請求組件
if ($request->isAjax) { /* 該請求是一個 AJAX 請求 */ }
if ($request->isGet) { /* 請求方法是 GET */ }
if ($request->isPost) { /* 請求方法是 POST */ }
if ($request->isPut) { /* 請求方法是 PUT */ }
~~~
## 請求URLs
`request`?組件提供了許多方式來檢測當前請求的URL。
假設被請求的URL是?`http://example.com/admin/index.php/product?id=100`, 你可以像下面描述的那樣獲取URL的各個部分:
* `yii\web\Request::url`:返回?`/admin/index.php/product?id=100`, 此URL不包括host info部分。
* `yii\web\Request::absoluteUrl`:返回?`http://example.com/admin/index.php/product?id=100`, 包含host infode的整個URL。
* `yii\web\Request::hostInfo`:返回?`http://example.com`, 只有host info部分。
* `yii\web\Request::pathInfo`:返回?`/product`, 這個是入口腳本之后,問號之前(查詢字符串)的部分。
* `yii\web\Request::queryString`:返回?`id=100`,問號之后的部分。
* `yii\web\Request::baseUrl`:返回?`/admin`, host info之后, 入口腳本之前的部分。
* `yii\web\Request::scriptUrl`:返回?`/admin/index.php`, 沒有path info和查詢字符串部分。
* `yii\web\Request::serverName`:返回?`example.com`, URL中的host name。
* `yii\web\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::userAgent`:返回?`User-Agent`?頭。
* `yii\web\Request::contentType`:返回?`Content-Type`?頭的值,?`Content-Type`?是請求體中MIME類型數據。
* `yii\web\Request::acceptableContentTypes`:返回用戶可接受的內容MIME類型。 返回的類型是按照他們的質量得分來排序的。得分最高的類型將被最先返回。
* `yii\web\Request::acceptableLanguages`:返回用戶可接受的語言。 返回的語言是按照他們的偏好層次來排序的。第一個參數代表最優先的語言。
假如我們的應用支持多語言,并且我們想在終端用戶最喜歡的語言中顯示頁面,那么我們可以使用語言協商方法 `yii\web\Request::getPreferredLanguage()`。 這個方法通過 `yii\web\Request::acceptableLanguages` 在我們的應用中所支持的語言列表里進行比較篩選,返回最適合的語言。
> 提示:我們也可以使用 `yii\filters\ContentNegotiator` 過濾器進行動態確定哪些內容類型和語言應該在響應中使用。 這個過濾器實現了上面介紹的內容協商的屬性和方法。
## 客戶端信息
我們可以通過 `yii\web\Request::userHost` 和 `yii\web\Request::userIP` 分別獲取host name和客戶機的IP地址
~~~
$request = \Yii::$app->request; // 獲取Yii請求組件
$userHost = $request->userHost;
$userIP = $request->userIP;
~~~
- 開始
- Yii2開發小技巧
- Yii2使用不同的方式進行郵件發送邏輯處理
- Yii2 Serialization of 'Closure' is not allowed 錯誤
- Yii創建應用
- Yii應用結構和流程
- Yii的路徑別名
- Yii的請求
- Yii的響應
- Sessions 和 Cookies
- Yii自定義全局工具函數
- Yii2模型
- Yii2視圖
- Yii2控制器
- 大數據節省內存處理
- 關聯查詢hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后臺主題
- Yii2模型中的場景
- Yii2中的RBAC
- Yii2項目后臺整合yii2-admin模塊
- RBAC集成AdminLTE后臺主題對菜單進行控制
- Yii2自定義Gii模板
- 修復AdminLTE引用外部字體文件導致訪問變慢的情況
- Yii2事件簡單使用
- Yii2模型事件
- Yii2使用GridView新增操作按鈕
- Yii2向loyout模板文件中傳值
- Yii2數據緩存
- Yii2緩存
- Yii2數據緩存之增刪改查
- Yii2拓展
- Yii2日期時間插件-datetimepicker
- kartik-v/yii2-widget-fileinput上傳插件