Если вы используете загрузочный модуль для каждого модуля, вы, безусловно, можете сделать это там. Тем не менее, я бы рекомендовал держать его на уровне контроллера.
Вы также можете продолжать использовать метод preDispatch()
, но вместо этого просто переместите логику в плагин контроллера. Это повлияет на вызов preDispatch()
для каждого контроллера.
# in application.ini
resources.frontController.plugins.authenticator = MyApp_Controller_Plugin_Authenticator
# plugin class
class MyApp_Controller_Plugin_Authenticator extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
// check for authenticated user
}
}
В качестве альтернативы, вы можете просто определить логику в базовом контроллере, от которого наследуются все остальные контроллеры. Вот как я обычно это делаю (потому что я выбираю, когда позвонить _setLoginRequired()
, когда мне это нужно).
MyApp_Controller_Base extends Zend_Controller_Action
{
public function init()
{
$this->_setLoginRequired();
}
protected function _setLoginRequired();
{
// check for authenticated user
}
}