Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何让Zend Framework使用';特定模块';配置?_Php_Zend Framework_Module - Fatal编程技术网

Php 如何让Zend Framework使用';特定模块';配置?

Php 如何让Zend Framework使用';特定模块';配置?,php,zend-framework,module,Php,Zend Framework,Module,阅读文档中的Zend_应用程序_资源_模块部分: 我注意到: 可以使用模块名称作为配置文件中的前缀或子节来指定特定于模块的配置 使用此选项: [production] news.resources.db.adapter = "pdo_mysql" news.resources.db.params.host = "localhost" news.resources.db.params.username = "webuser" news.resources.db.params.

阅读文档中的Zend_应用程序_资源_模块部分:

我注意到:

可以使用模块名称作为配置文件中的前缀或子节来指定特定于模块的配置

使用此选项:

  [production]
  news.resources.db.adapter = "pdo_mysql"
  news.resources.db.params.host = "localhost"
  news.resources.db.params.username = "webuser"
  news.resources.db.params.password = "XXXXXXX"
  news.resources.db.params.dbname = "news"
对我来说这是个好主意。但是,当我简单地将这些前缀添加到我想要特定于我的模块的某些东西时,没有任何变化


所以我的问题是:如何告诉Zend Framework实际使用这些特定于模块的前缀?

我在Zend中使用以下模块实现。它允许您使用“模块特定”配置

application/config/config.ini
-----------------------------
[production]
resources.modules[] =
通过这样做,您告诉Zend_应用程序您想要使用模块引导资源插件。模块插件将为每个模块加载一个单独的bootsrap类,默认模块除外。因此,您需要为第二个模块创建一个新的引导类

application/modules/news/Bootstrap.php
-----------------------------
class News_Bootstrap extends Zend_Application_Module_Bootstrap {

   //---------------------------------------
   // Automatically load our resources
   //
   // NOTE: You don't have to add this, its
   //       just and example to show that you
   //       can customize the bootstrap
   //       process just for this module.
   public function _initModuleResourceAutoloader(){

      $this->getResourceLoader()->addResourceTypes(array(
         'modelResource' => array(
            'path' => 'models/resources',
            'namespace' => 'Resource'
         )
      ));
   }
}
这个“News_Bootstrap”类现在将在引导过程中加载和执行

此文件的命名约定很重要,因为模块资源插件需要能够找到类。请注意,必须将文件命名为Bootstrap.php

最后,您会注意到,您正在子类化Zend_应用程序_模块_引导,而不是像在主引导中那样子类化Zend_应用程序_引导

现在,您的模块特定配置应该可以工作了:

[production]
news.resources.db.adapter = "pdo_mysql"
news.resources.db.params.host = "localhost"
news.resources.db.params.username = "webuser"
news.resources.db.params.password = "XXXXXXX"
news.resources.db.params.dbname = "news"

刚开始,我不建议使用特定于模块的配置,因为这听起来会让下一个来维护应用程序的人非常困惑。不过我还是投了赞成票,因为我可能错了。嘿,Darryl,我找到了这篇文章,它可能会帮助我感谢你的回答。这是我在找到文档中提到的特定于模块的前缀之前尝试做的第一件事。上述(正常方式)将对存在的每个模块执行所有引导中的所有
\u init*()
方法,而不考虑活动模块。我不想要这个。Darryl,也许你可以检测哪个模块是活动的,然后设置一个标志。然后让其他引导中的所有_init*()方法检查标志,以确定代码执行是否应该继续。最好记住:我通常在我的模块中重复使用模型和资源。例如,我可能有一个“新闻”模块,允许我的公关和营销团队通过CMS添加/编辑文章。假设我想在我们的主页上显示这些文章,我会在默认模块中重用新闻模块中的模型或资源。为了让它工作,我需要引导过程来执行所有的_init*()方法。我发现你的答案就是我问题的答案。这不是我想要的行为。Zend框架文档的另一个-1(我真的希望它是为2.0安装的)。带前缀的基于模块的配置选项仅在模块引导中可用。我将不得不研究检测活动模块的其他解决方案,并且只对该部分进行引导。谢谢对于特定于模块的配置,可以在模块目录的configs文件夹中使用名为module.ini的单独文件。假设您可以将module.ini文件放在:application/modules/my_module/configs中