Zend Framework 的 MVC 架構核心在於 Zend_Controller_Front 前端控制器。它負責初始化請求環境、路由分發、處理請求並完成響應。前端控制器採用單例模式,確保整個應用程式僅存在一個實例。若需擴展特殊功能,可繼承 Zend_Controller_Front 自訂前端控制器。
獲取前端控制器實例的唯一方式:
$front = Zend_Controller_Front::getInstance();
設定動作控制器類檔案的存放路徑。參數可為字串或關聯陣列:
// 字串路徑
$front->setControllerDirectory('../application/controllers');
// 關聯陣列(模組化)
$front->setControllerDirectory(array(
'default' => '../application/controllers',
'blog' => '../modules/blog/controllers',
'news' => '../modules/news/controllers'
));
// 新增模組目錄
$front->addControllerDirectory('../modules/foo/controllers', 'foo');
若 addControllerDirectory() 未指定模組名,將覆蓋 default 模組目錄。可透過 getControllerDirectory() 取得目前設定。
支援模組化目錄結構,每個模組擁有獨立的 controllers、views 等子目錄。addModuleDirectory() 掃描並註冊模組目錄;getModuleDirectory() 可取得特定模組路徑。
核心分發方法,接受可選的請求與響應物件。若未提供,將使用預設 HTTP 物件。分發過程包含三個階段:路由、分發、響應。路由僅執行一次;分發在循環中進行,可能觸發多個動作;最後返回響應物件。
靜態便捷方法,一次完成實例化、設定控制器目錄與分發:
Zend_Controller_Front::run('../application/controllers');
前端控制器提供多種存取器調整環境:
resetInstance():清除所有設定,適合測試或串聯多前端控制器。setDefaultControllerName()/getDefaultControllerName():設定/取得預設控制器名稱(預設 index)。setDefaultAction()/getDefaultAction():設定/取得預設動作名稱(預設 index)。setRequest()/getRequest():指定請求類別或物件。setRouter()/getRouter():指定路由器類別或物件。setBaseUrl()/getBaseUrl():設定路由時需剝離的基礎 URL。setDispatcher()/getDispatcher():指定分發器類別或物件。setResponse()/getResponse():指定響應類別或物件。registerPlugin()/unregisterPlugin():註冊/移除插件,可控制執行順序。throwExceptions():開啟/關閉分發過程拋出異常(預設捕獲至響應物件)。returnResponse():控制 dispatch() 是否返回響應物件(預設自動發送)。透過 setParam()、setParams()、getParam()、getParams()、clearParams() 管理任意資料,這些資料會傳遞給路由器、分發器與動作控制器。預定義參數包括:
useDefaultControllerAlways:無法分發時使用預設模組控制器。disableOutputBuffering:禁用輸出緩衝。noViewRenderer:禁用 ViewRenderer 助手。noErrorHandler:禁用錯誤處理插件。繼承時需覆寫 getInstance() 確保返回子類實例:
class My_Controller_Front extends Zend_Controller_Front {
public static function getInstance() {
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
}
通常無需繼承,除非需新增功能(如插件自動載入、動作助手路徑指定)。Bootstrap 機制已足夠靈活配置前端控制器。
更多 Zend Framework 相關教程請參考本站專題:《Zend FrameWork框架入門教程》、《php優秀開發框架總結》、《Yii框架入門及常用技巧總結》、《ThinkPHP入門教程》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》。