## Yaf官方文檔參考
http://php.net/manual/zh/class.yaf-request-abstract.php
http://www.laruence.com/manual/yaf.class.request.html
> 在控制器繼承了 Yaf\Controller_Abstract 可以通過$this->getRequest()來獲取當前請求的對象。該對象為Yaf\Request\Http 的實例。
> http請求或者Cli模式下的,一般不用自己去實例化,Yaf_Application(開啟命名空間后為Yaf\Application)在run以后會自動根據當前請求實例它。
> 如果是在命令行或者終端下運行,則 $this->getRequest() 為 Yaf\Request\Simple的實例。
## Request類
#### Yaf\Request_Abstract
Request抽象類
#### Yaf\Request\Http
Web請求實體類,該類繼承自Yaf\Request_Abstract
#### Yaf\Request\Simple
終端請求實體類,同樣繼承自Yaf\Request_Abstract, CLI模式下可以模擬一些測試,或者跑一些任務腳本。
## 獲取請求信息
### (1) 獲取服務器及環境信息
getServer:獲取服務器變量信息,類似于$_SERVER全局變量
getEnv:獲取環境變量信息,類似于$_ENV
getLanguage:獲取客戶端的語言信息,如zh-CN
```
var_dump($this->getRequest()->getServer() === $_SERVER); // true
var_dump($this->getRequest()->getEnv() === $_ENV); // true
var_dump($this->getRequest()->getLanguage()); //
```
### (2) 獲取請求參數
* get:從客戶端返回變量,這個方法將從請求參數中尋找參數name,如果沒有找到的話,將從POST, GET, Cookie, Server中尋找
* getPost:獲取POST請求數據
* getQuery : 獲取查詢字符串的信息
* getParam : 獲取路由參數信息
* getParams : 獲取所有路由參數信息
* getRequestUri : 獲取請求的uri
* getMethod : 獲取請求的類型
* getBaseUri : 獲取請求的基本uri
* getCookie : 獲取cookie信息
* getFiles : 獲取請求中的文件信息
演示代碼
```
$request = $this->getRequest();
echo '<pre>';
// http://127.0.0.1/example/request/params?user=test&uid=1
var_dump($request->get('user')); // test
var_dump($request->getQuery()); // ['user' => test, 'uid' => 1]
var_dump($request->getQuery('user')); // test
var_dump($request->getPost()); // empty
var_dump($request->getPost('user')); // null
var_dump($request->getRequestUri()); // /example/request/params
var_dump($request->getMethod()); // GET
var_dump($request->getBaseUri()); // ''
var_dump($request->getCookie()); // emtpy
var_dump($request->getFiles()); // empty
// http://yaf-skel.com/example/request/params/user/test/uid/1
var_dump($request->getParams()); // ['user' => test, 'uid' => 1]
var_dump($request->getParam('uid')); // 1
var_dump($request->getRequestUri()); // /example/request/params/user/test/uid/1
```
### (3) 判斷請求類型
* isCli:是否為命令行
* isGet:是否為get請求
* isPost:是否為Post請求
* isPut:是否為PUT請求
* isHead:是否為Head請求
* isOptions:是否為Options請求
* isXmlHttpRequest:是否為ajax請求
```
/**
* 獲取請求類型
*/
public function methodAction()
{
var_dump($this->getRequest()->isCli());
var_dump($this->getRequest()->isGet());
var_dump($this->getRequest()->isPost());
var_dump($this->getRequest()->isPut());
var_dump($this->getRequest()->isXmlHttpRequest()); // 是否為ajax請求
var_dump($this->getRequest()->isHead());
var_dump($this->getRequest()->isOptions());
}
```
### (4) 與分發相關的方法
* getModuleName:獲取當前模塊名稱
* getControllerName:獲取當前控制器名稱
* getActionName:獲取當前操作名稱
* getException:獲取當前請求異常對象
* isDispatched:是否已經分發請求
* isRouted:是否已經將路由規則進行匹配
設置分發匹配
這個默認是系統分發時調用,如果是使用自定義路由協議,會使用到
* setBaseUri:設置基本的uri,一般不需要設置,框架會自動識別
* setModuleName:設置模塊名稱
* setControllerName:設置控制器名稱
* setActionName:設置操作名稱
* setParam:設置路由參數
* setRequestUri:設置請求uri
* setRouted:設置是否已經路由
* setDispatched:設置是否已經分發路由
```
/**
* 獲取分發相關的方法
*/
public function dispatchAction()
{
$this->getRequest()->setModuleName('Api');
$this->getRequest()->setControllerName('Index');
$this->getRequest()->setActionName('xxx');
$this->getRequest()->setDispatched();
$this->getRequest()->setRouted();
}
```