所有動作控制器必須繼承 Zend_Controller_Action,實作 Zend_Controller_Action_Interface。建構子注入請求、回應物件與呼叫參數,初始化助理代理器並呼叫 init()。
initView():初始化視圖物件,依模組/控制器目錄結構設定基礎路徑。render($action, $name, $noController):渲染視圖腳本至回應物件指定片段。renderScript($script, $name):渲染指定腳本路徑。getViewScript():取得視圖腳本相對路徑(自動轉換分隔符為 -)。getRequest() / getResponse():取得請求/回應物件。_getParam($key, $default) / _setParam() / _hasParam() / _getAllParams():請求參數快捷操作。_helper 屬性提供助理存取,常用操作:
// 單一動作停用自動渲染
$this->_helper->viewRenderer->setNoRender();
// 全域停用 ViewRenderer
Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
_forward($action, $controller, $module, $params):轉發至另一個動作。_redirect($url, $options):重導向,支援 exit、prependBase、code 選項。preDispatch():動作執行前(可修改請求、跳過動作)。postDispatch():動作執行後。class MyController extends Zend_Controller_Action
{
public function __call($method, $args)
{
if ('Action' == substr($method, -6)) {
return $this->render('error'); // 或 _forward('index')
}
throw new Exception('Invalid method "' . $method . '"', 500);
}
}
abstract class My_Base_Controller extends Zend_Controller_Action
{
public function initView()
{
if (null === $this->view) {
if (Zend_Registry::isRegistered('view')) {
$this->view = Zend_Registry::get('view');
} else {
$this->view = new Zend_View();
$this->view->setBasePath(dirname(__FILE__) . '/../views');
}
}
return $this->view;
}
}
Zend_Controller_Action 提供視圖渲染、助理機制、請求回應存取、流程控制等核心功能,透過覆寫鉤子方法與建構子流程,能靈活擴充符合專案需求的基礎控制器類別。