- FuelPHP 教程
- FuelPHP - 首頁
- FuelPHP - 簡介
- FuelPHP - 安裝
- FuelPHP - 架構概述
- FuelPHP - 簡單Web應用
- FuelPHP - 配置
- FuelPHP - 控制器
- FuelPHP - 路由
- FuelPHP - 請求與響應
- FuelPHP - 檢視
- FuelPHP - 展示器
- FuelPHP - 模型與資料庫
- FuelPHP - 表單程式設計
- FuelPHP - 驗證
- 高階表單程式設計
- FuelPHP - 檔案上傳
- FuelPHP - Ajax
- FuelPHP - HMVC 請求
- FuelPHP - 主題
- FuelPHP - 模組
- FuelPHP - 包
- Cookie & Session 管理
- FuelPHP - 事件
- FuelPHP - 郵件管理
- FuelPHP - 效能分析器
- 錯誤處理與除錯
- FuelPHP - 單元測試
- 完整的執行示例
- FuelPHP 有用資源
- FuelPHP - 快速指南
- FuelPHP - 有用資源
- FuelPHP - 討論
FuelPHP - 請求與響應
HTTP 請求和 HTTP 響應在任何 Web 應用中都扮演著重要的角色。我們需要獲取 HTTP 請求的完整細節才能正確地處理它。處理完成後,我們需要透過 HTTP 響應將處理後的資料傳送給客戶端。
FuelPHP 提供了優秀的Request和Response類,分別用於讀取和寫入 HTTP 請求和 HTTP 響應。讓我們在本節學習這兩個類。
Request (請求)
在一個典型的 Web 應用中,應用需要解析當前請求的細節。Request 類提供簡單的方法來解析當前請求,以便應用進行處理。Request 還提供了一個選項,可以透過充當 HTTP 客戶端來建立新的請求。
建立新的請求使應用程式能夠請求應用程式的其他部分或完全不同的應用程式並顯示結果。讓我們在本節學習如何解析傳入的請求,並在 HMVC 請求章節學習如何建立新的請求。
解析請求
Request 類提供三種方法來獲取 HTTP 請求的詳細資訊,如下所示:
active − 這是一個靜態方法,它返回當前活動的 HTTP 請求。
$currentRequest = Request::active();
param − 它返回指定引數的值。它包含兩個引數。第一個引數是引數名稱,第二個引數是如果當前 HTTP 請求中不存在該引數時要返回的值。
$param = Request::active()->param('employee_name', 'none');
params − 它與 param 相同,只是它返回所有引數作為一個數組。
$params = Request::active()->params();
示例
讓我們建立一個簡單的表單,並使用 Request 類處理該表單。
步驟 1 − 在 employee 控制器中建立一個新的 action,action_request。
public function action_request() {
}
步驟 2 − 呼叫 Request 方法獲取當前請求的所有引數。
public function action_request() {
$params = Request::active()->params();
}
步驟 3 − 轉儲獲取到的引數陣列。
public function action_request() {
$params = Request::active()->params();
echo dump($params);
}
步驟 4 − 修改路由,在路由配置檔案 fuel/app/config/routes.php 中包含引數。
'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),
現在,請求新的 action,https://:8080/employee/request/Jon,它將顯示以下響應。
Response (響應)
Response 類提供建立 HTTP 響應的選項。在大多數情況下,我們不需要直接使用 Response 類。相反,我們使用View(我們將在下一節學習)來建立 HTTP 響應。View 將 HTTP 響應隱藏在開發者面前,並使用底層的Response類將響應傳送給客戶端。在高階情況下,我們可以直接使用 Response 類並建立一個完整的 HTTP 響應。
建立響應
響應包含報頭和正文。主要的報頭是 HTTP 狀態程式碼。HTTP 狀態程式碼是在 HTTP 協議中定義的標準程式碼,用於描述響應。例如,狀態程式碼 200 表示請求成功。
Response 類提供三個引數來建立 HTTP 響應:
- $body − HTTP 響應的正文
- $status_code − HTTP 響應的狀態程式碼
- $headers − 可選的報頭,作為陣列
$body = "Hi, FuelPHP"; $headers = array ( 'Content-Type' => 'text/html', ); $response = new Response($body, 200, $headers);
讓我們在 employee 控制器中建立一個新的 action,action_response,如下所示。
public function action_response() {
$body = "Hi, FuelPHP";
$headers = array (
'Content-Type' => 'text/html',
);
$response = new Response($body, 200, $headers);
return $response;
}
結果
方法
Response 類提供許多方法來操作 HTTP 響應,如下所示:
forge − 它與上面看到的 Response 類建構函式相同。
return Response::forge("Hi, FuelPHP", 404);
redirect − 它提供了一個選項,用於重定向到 URL,而不是傳送響應。它包含以下引數:
a. url − 目標 URL b. method - 重定向方法。location(預設)和refresh c. redirect_code - HTTP 狀態程式碼。預設值為 302。
// use a URL
Response::redirect('http://some-domain/index', 'refresh');
// or use a relative URI
Response::redirect('employee/list');
redirect_back − 它類似於 redirect 方法,只是它重定向到上一頁。如果找不到上一頁,我們可以指定重定向頁面。
// If there is no back page, go to the employee list page
Response::redirect_back('/employee/list', 'refresh');
set_status − 它提供了一個選項來設定 HTTP 狀態程式碼。
$response = new Response(); $response->set_status(404);
set_header − 它提供了一個選項來設定 HTTP 報頭。
$response = new Response();
$response->set_header('Content-Type', 'application/pdf');
// replace previous value using third arguments
$response->set_header('Content-Type', 'application/pdf', 'text/plain');
set_headers − 它與set_header相同,只是它提供了一個選項,可以使用陣列設定多個報頭。
$response = new Response(); $response->set_headers(array 'Content-Type' => 'application/pdf', 'Pragma' => 'no-cache', ));
get_header − 它可以獲取之前設定的報頭詳細資訊。
$response = new Response();
$response->set_header('Pragma', 'no-cache');
// returns 'no-cache'
$header = $response->get_header('Pragma');
// returns array('Pragma' => 'no-cache')
$header = $response->get_header();
body − 它提供了一個選項來設定 HTTP 響應的正文。
$response = new Response();
$response->body('Hi, FuelPHP');
// returns 'Hi, FuelPHP'
$body = $response->body();
send_headers − 它將報頭髮送到請求的客戶端。FuelPHP 使用此方法將響應傳送給客戶端。通常,我們不需要使用此方法。
$response->send_headers();
Send − 與 send_headers 相同,只是 HTTP 響應中的報頭可能受到限制。
// send the headers as well $response->send(true); // only send the body $response->send(false); $response->send();