我们目前正在将我们的应用程序(基于Zend框架1.11)重组为模块化结构,并且正在解决我们需要能够在模块的自动加载器注册之前使用模块内的资源的问题。 / p>
例如,我们有一个前端控制器插件来检查用户的登录状态..
class Application_Plugin_LoginCheck extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request) {
// ACL-lookup code which ultimately retrieves Othermodule_Model_User
// from session
// Othermodule_Model_User is not defined
}
}
此时我们需要Othermodule_Model_User
,但似乎Othermodule
的自动加载器在引导序列之前不会被注册。
同样,同样的问题阻止我们在任何给定模块的bootstrap类中使用任何其他模块的类。
在Zend Framework应用程序中实现此类设置的正确方法是什么?
使用Zend的应用程序引导程序和模块引导程序类完成Bootstrapping。我在下面列举了一个例子 - 我认为我们没有做任何不寻常的事情。
应用程序引导程序:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
protected function _initDb() {...}
protected function _initConfig() {...}
protected function _initLog() {...}
protected function _initMvcStaticRoutes() {...}
protected function _initRestRoute() {...}
protected function _initTranslate() {...}
public function _initActionHelpers() {...}
public function _initViewHelpers() {...}
}
模块引导程序:
class Account_Bootstrap extends Zend_Application_Module_Bootstrap {
protected function _initTranslate() {
...
}
}
该插件已在应用程序配置中注册
resources.frontController.plugins.logincheck.class = "Application_Plugin_LoginCheck"