代码之家  ›  专栏  ›  技术社区  ›  Don Jones

zend framework 1.9 addmoduledirectory不工作?

  •  0
  • Don Jones  · 技术社区  · 16 年前

    好吧,我很沮丧,说不出话来!

    我有ZF 1.9申请表。以下内容在my bootstrap.php中:

    $front = Zend_Controller_Front::getInstance();
    $front->addModuleDirectory(dirname(__FILE__).'/modules');
    

    我已经在zf库文件中放置了一些跟踪代码,我可以看到对addmoduledirectory的调用以及随后对addcontrollerdirectory的内部调用——它为模块名和路径提供了正确的值。如果我转储了内部的controller directory变量(顺便说一下,这都在library/controller/dispatcher/standard.php中),我可以看到我的模块目录。

    我的跟踪显示的下一件事是为默认控制器添加默认控制器目录-完美。

    但是,在下一次调用dispatch()时,我再次转储了_controller directory变量,它只得到默认模块的controller目录。世界跆拳道联盟?我有追踪到一个文件…这里是(我评论):

        -- 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中唯一的东西。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Don Jones    16 年前

    好的,解决方案似乎是将它添加到application.ini中:

    resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
    

    这有点不具逻辑性,至少在ZF参考手册中没有远程记录。Oy。但这似乎解决了问题。

        2
  •  -1
  •   Chris    16 年前

    我认为这取决于您将它放在引导程序上的哪个部分,因为如果您将它放在应用程序资源控制器之前,那么它可能会覆盖。要确保前控制器已引导,可以使用如下方法:

    protected function _initFrontModules() {
          $this->bootstrap('frontController');
          $front = $this->getResource('frontController');
          $front->addModuleDirectory('path/to/modules');
    }
    

    如果省略了引导行,它可能首先执行您的方法,然后用插件中的方法覆盖它。