2012-01-03 115 views

回答

1

我在我的第一個ZF項目中從基礎控制器擴展而來。在我看來,如果你知道你的所有子類將總是使用超類的相同通用功能,那麼這不是一個壞方法。

在任何情況下,對於我的後續項目,我切換到使用動作助手和控制器插件(請參閱Zend Framework: Controller Plugins vs Action Helpers),我從不回頭。他們看起來更加靈活,並允許我重用項目中的一些功能。它還堅持更多的「偏好組合繼承」的原則(這裏有一個相關的問題:Prefer composition over inheritance?)。

希望幫助,

1

也許你應該在這個看一看:

Extending Zend_Controller_Action

我個人致以控制器一些自定義的功能添加到我的控制器。 示例:如果檢查請求是來自cron作業還是普通請求。有時我會檢查AJAX請求或禁用調試和分析。

這是我的初始化函數:

 public function init() { 

     parent::init(); 

     if (($this->getRequest()->getParam('type') == 'cron')||($this->getRequest()->getParam('type') == 'cmd') || ($this->getRequest() instanceof Zend_Controller_Request_Http && $this->getRequest()->isXmlHttpRequest())) { 

     Zend_Registry::get('debug')->disable(); 
     $this->_helper->layout->disableLayout(); 
     $this->_helper->viewRenderer->setNoRender(true); 
     } 

} 

這真的取決於你想在你的控制器做什麼。

0

你也可以使用一個BaseController檢查使用preDispatch法授權,即自動實際行動之前稱爲:

public function preDispatch() 
{ 
    $request = Zend_Controller_Front::getInstance()->getRequest(); 
    $controller = $request->getControllerName(); 

    if($controller == 'user') { 
     return; 
    } 

    $auth = Zend_Auth::getInstance(); 
    if (! $auth->hasIdentity()) { 
     $this->_helper->redirector("login_error", "user"); 
    } 
}