所有動作助手需繼承 Zend_Controller_Action_Helper_Abstract,該抽象類別提供核心屬性與生命週期方法:
abstract class Zend_Controller_Action_Helper_Abstract {
protected $_actionController = null;
protected $_frontController = null;
public function setActionController(Zend_Controller_Action $actionController = null) { ... }
public function getActionController() { return $this->_actionController; }
public function getFrontController() { return Zend_Controller_Front::getInstance(); }
public function init() { } // 實例化時觸發
public function preDispatch() { } // 分發前觸發
public function postDispatch() { } // 分發後觸發
public function getRequest() { ... } // 取得請求物件
public function getResponse() { ... } // 取得回應物件
public function getName() { ... } // 取得助手短名稱 (類名最後一段)
}
class Application_Controller_Action_Helpers_UrlParser extends Zend_Controller_Action_Helper_Abstract {
public function parse($url) {
return parse_url($url);
}
}
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initAutoload() {
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace(array('Application_'));
}
protected function _initActionHelpers() {
// 方式 1: 註冊實例 (最直接)
Zend_Controller_Action_HelperBroker::addHelper(
new Application_Controller_Action_Helpers_UrlParser
);
// 方式 2: 註冊前綴 (需遵循命名慣例)
// Zend_Controller_Action_HelperBroker::addPrefix('Application_Controller_Action_Helpers');
// 方式 3: 註冊路徑與前綴
// Zend_Controller_Action_HelperBroker::addPath(
// '/www/helper_demo1/library/Application/Controller/Action/Helpers',
// 'Application_Controller_Action_Helpers'
// );
}
}
class IndexController extends Zend_Controller_Action {
public function indexAction() {
$urlParser = $this->_helper->getHelper('UrlParser');
var_dump($urlParser->parse('https://www.example.com/article/80479.htm'));
}
}
前綴_助手名 (如 Application_Controller_Action_Helpers_UrlParser)UrlParser (用於 getHelper())前綴/助手名.php (如 Application/Controller/Action/Helpers/UrlParser.php)addPrefix('Application_Controller_Action_Helpers') 會對應 Application/Controller/Action/Helpers/ 目錄自訂動作助手只需繼承抽象基類、實作業務邏輯、於 Bootstrap 註冊即可在所有 Controller 中透過 $this->_helper->getHelper('助手名') 使用。掌握命名慣例與三種註冊方式,能靈活擴充框架功能。