首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Zend Framework 前端控制器 Zend_Controller_Front 完整指南

     編輯:PHP 綜合知識

前端控制器核心機制

Zend Framework 的 MVC 架構核心在於 Zend_Controller_Front 前端控制器。它負責初始化請求環境、路由分發、處理請求並完成響應。前端控制器採用單例模式,確保整個應用程式僅存在一個實例。若需擴展特殊功能,可繼承 Zend_Controller_Front 自訂前端控制器。

主要方法詳解

getInstance()

獲取前端控制器實例的唯一方式:

$front = Zend_Controller_Front::getInstance();

setControllerDirectory() 與 addControllerDirectory()

設定動作控制器類檔案的存放路徑。參數可為字串或關聯陣列:

// 字串路徑
$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() 取得目前設定。

addModuleDirectory() 與 getModuleDirectory()

支援模組化目錄結構,每個模組擁有獨立的 controllers、views 等子目錄。addModuleDirectory() 掃描並註冊模組目錄;getModuleDirectory() 可取得特定模組路徑。

dispatch()

核心分發方法,接受可選的請求與響應物件。若未提供,將使用預設 HTTP 物件。分發過程包含三個階段:路由、分發、響應。路由僅執行一次;分發在循環中進行,可能觸發多個動作;最後返回響應物件。

run()

靜態便捷方法,一次完成實例化、設定控制器目錄與分發:

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常見數據庫操作技巧匯總》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved