在 Zend Framework 架構中,動作助手是擴展控制器功能的關鍵機制。本文將詳細解說如何從零開始建立自訂動作助手,並透過實際範例示範其註冊與使用流程。
所有動作助手的抽象基類為 Zend_Controller_Action_Helper_Abstract。欲開發專屬助手,必須繼承此類別。基類提供以下核心方法:
setActionController():注入當前動作控制器實例init():助手實例化時自動觸發,適合初始化邏輯preDispatch():動作分發前執行postDispatch():動作分發結束後執行(即使 preDispatch 已跳過動作)getRequest() / getResponse():取得請求/回應物件getName():依類別命名慣例自動解析助手名稱(底線或反斜線後的片段)建立一個解析網址並回傳各組成部分的助手類別:
路徑:/library/Application/Controller/Action/Helpers/UrlParser.php
<?php
require_once 'Zend/Controller/Action/Helper/Abstract.php';
class Application_Controller_Action_Helpers_UrlParser extends Zend_Controller_Action_Helper_Abstract
{
public function __construct() {}
/**
* 解析 URL
* @param string $url 目標網址
* @return array 解析後的關聯陣列
*/
public function parse($url)
{
return parse_url($url);
}
}
修改 /application/Bootstrap.php,於 _initActionHelpers() 中採用三種方式其一即可:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace(array('Application_'));
}
protected function _initActionHelpers()
{
// 方式三:直接實例化注入(推薦,最明確)
Zend_Controller_Action_HelperBroker::addHelper(
new Application_Controller_Action_Helpers_UrlParser()
);
}
}
修改 /application/controllers/IndexController.php:
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$urlParser = $this->_helper->getHelper('UrlParser');
$result = $urlParser->parse('https://www.example.com/article/80479.htm');
var_dump($result);
}
}
Application_Controller_Action_Helpers_UrlParser)library/Application/Controller/Action/Helpers/掌握此機制後,即可將常用的跨控制器邏輯封裝為可重複使用的助手,大幅提升專案維護性與擴充性。