好的,我感到很沮丧!
我有一个ZF 1.9应用程序。以下是我的bootstrap.php:
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory(dirname(__FILE__).'/modules');
我已经将一些跟踪代码放入ZF库文件中,我可以看到对addModuleDirectory的调用以及对addControllerDirectory的后续内部调用 - 它为模块名称和路径提供了正确的值。如果我转储内部_controllerDirectory变量(顺便说一下,这都在Library / Controller / Dispatcher / Standard.php中),我可以看到我的模块目录。
我的跟踪显示的下一件事是默认控制器目录是为默认控制器添加的 - 完美。
但是,在下次调用dispatch()时,我再次转储_controllerDirectory变量,它只获得了默认模块的控制器目录。 WTF?我有跟踪文件...这里是(由我评论):
-- first call, triggered by addModuleDirectory(): Adding 13:09:08 Module itemquestion Path /Users/don/Documents/Aptana Studio Workspace/cahoots2/application/modules/itemquestion/controllers -- You can see my dir is in here... _controllerDirectory contains: 13:09:08 /Users/don/Documents/Aptana Studio Workspace/cahoots2/application/modules/itemquestion/controllers -- second call, triggered internally by ZF: Adding 13:09:08 Module default Path /Users/don/Documents/Aptana Studio Workspace/cahoots2/application/controllers -- Where's my directory???? _controllerDirectory contains: 13:09:08 /Users/don/Documents/Aptana Studio Workspace/cahoots2/application/controllers
世界上我做错了什么?为什么我不能让我的模块目录保持持久性?
编辑:一些额外的细节。我在/ modules文件夹中添加了第二个模块。现在,我可以看到第一个模块被添加并显示在_controllerDirectory变量中。然后,我可以看到第二个添加,并在变量中看到它们的两个。然后我看到添加了默认模块,在调用之后,它是_controllerDirectory中的唯一内容。
答案 0 :(得分:3)
好的,似乎解决方法是将其添加到application.ini:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
这有点不直观,至少在ZF参考手册中没有记录。 Oy公司。但这似乎解决了这个问题。
答案 1 :(得分:-1)
嗯,我认为这取决于你把它放在引导程序上的哪个部分,因为,如果你把它放在应用程序资源控制器之前,那么它可能会覆盖。要确保前控制器是自举的,您可以使用以下内容:
protected function _initFrontModules() {
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$front->addModuleDirectory('path/to/modules');
}
如果省略bootstrap行,它可能先执行你的方法,然后用插件中的那个覆盖它。