Как мне заставить Zend Framework использовать конфигурации, специфичные для модуля? - PullRequest
2 голосов
/ 02 декабря 2010

Чтение раздела Zend_Application_Resource_Modules в документации здесь: http://framework.zend.com/manual/1.10/en/zend.application.available-resources.html

Я заметил это:

Вы можете указать специфическую для модуля конфигурацию, используя имя модуля в качестве префикса или подраздела в вашем файле конфигурации.

используя это:

  [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 фактически использовал эти префиксы, специфичные для модуля?

1 Ответ

4 голосов
/ 02 декабря 2010

Я использую следующую реализацию модулей в Zend.Это позволяет вам использовать «специфичную для модуля» конфигурацию.

application/config/config.ini
-----------------------------
[production]
resources.modules[] =

Делая это, вы сообщаете Zend_Application, что вы хотите использовать плагин Modules Bootstrap Resource.Плагин Modules загрузит отдельный класс начальной загрузки для каждого из ваших модулей, исключая модуль по умолчанию.Поэтому вам нужно создать новый класс начальной загрузки для вашего второго модуля.

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" теперь будет загружаться и выполняться во время процесса начальной загрузки.

Соглашение об именах дляэтот файл важен, так как плагин Modules Resource должен уметь находить класс.Обратите внимание, что необходимо назвать файл Bootstrap.php.

Наконец, вы заметите, что вы подклассифицируете Zend_Application_Module_Bootstrap, а не Zend_Application_Bootstrap_Bootstrap, как вы делаете это в основной начальной загрузке.

Теперь ваша конфигурация конкретного модуля должна работать:

[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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...