可能重複:
Is a good idea have a BaseController and make all controllers extend that class?從BaseController Zend框架擴展
我想知道的好處/目的,爲什麼你應該從BaseController擴展您的控制器。我看到有人在做,但我不知道爲什麼。
可能重複:
Is a good idea have a BaseController and make all controllers extend that class?從BaseController Zend框架擴展
我想知道的好處/目的,爲什麼你應該從BaseController擴展您的控制器。我看到有人在做,但我不知道爲什麼。
我在我的第一個ZF項目中從基礎控制器擴展而來。在我看來,如果你知道你的所有子類將總是使用超類的相同通用功能,那麼這不是一個壞方法。
在任何情況下,對於我的後續項目,我切換到使用動作助手和控制器插件(請參閱Zend Framework: Controller Plugins vs Action Helpers),我從不回頭。他們看起來更加靈活,並允許我重用項目中的一些功能。它還堅持更多的「偏好組合繼承」的原則(這裏有一個相關的問題:Prefer composition over inheritance?)。
希望幫助,
也許你應該在這個看一看:
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);
}
}
這真的取決於你想在你的控制器做什麼。
你也可以使用一個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");
}
}
@DavidWeinraub不是一個重複。我要求實施這種架構的優點/缺點。 – 2012-01-14 18:21:40