我们目前正在将我们的应用程序(基于 Zend 框架 1.11)重新组织成一个模块化结构,并且遇到了一个问题,即我们需要能够在该模块的自动加载器注册之前使用该模块内的资源。
例如,我们有一个前端控制器插件来检查用户的登录状态..
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
在引导序列之前不会被注册。
同样,同样的问题阻止我们在任何给定模块的引导类中使用来自任何其他模块的类。
在 Zend Framework 应用程序中实现这种设置的正确方法是什么?
引导是使用 Zend 的应用程序引导和模块引导类完成的。我在下面举了一个例子——我认为我们没有做任何不寻常的事情。
应用程序引导:
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"