Witam,

Chciałbym w pluginie, do tablicy zawierającej ustawienia pochodzące z pliku application.ini, dodać/zmienić pewne ustawienia w zalezności od tego w jakim module się znajduje.

Mam kilka modułów:
/system
/blog
/admin

Każdy moduł posiada także swój application.ini który powinien nadpisać głowne opcje pochodzące z głównego application.ini.
Przykład dla application.ini w module blog:
Kod
[production]
resources.layout.layout = 'blog/layout'


Plugin w którym poróbuje to zrobić wygląda tak:
  1. <?php
  2. class System_Plugin_InitModule extends Zend_Controller_Plugin_Abstract
  3. {
  4. public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
  5. {
  6. $moduleOptions = new Zend_Config_Ini(APPLICATION_PATH . '/' . $request->getModuleName() . '/configs/application.ini', APPLICATION_ENV);
  7.  
  8. $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
  9. $options = $bootstrap->mergeOptions(
  10. $bootstrap->getOptions(),
  11. $moduleOptions->toArray()
  12. );
  13.  
  14. $bootstrap->setOptions($options);
  15. }
  16. }

Niestety setOptions() na koncu nie nadpisuje ustawień głównych. Czy mogę jakoś inaczej rozwiązać ten problem ?

---EDIT----
Myslę że rozwiąże to tak (na razie nie mam jak tego sprawdzić, ale powinno działać):
W Bootstrapie dla danego modułu:
1) Wczytam ustawienia główne (configs/application.ini)
2) Wczytam ustawienia dla modułu ($modul/configs/application.ini)
3) Uzyję mergeOptions() na tych 2 tablicach
4) Metoda która to będzie to robiła utworze w Bootstrapie głównym aplikacji jako metode statyczną, by w kazdym Bootstrapie modułu nie kopiowac tego samego kodu do nadpisywania ustawień

Przykładowy kod (na oko, pisany z palca)

  1. class Bootstrap extends Zend_Application_Module_Bootstrap
  2. {
  3. static public function mergeOptions($module)
  4. {
  5. $optionsModule = new Zend_Config_Ini(APPLICATION_PATH . '/' . $module . '/configs/application.ini', APPLICATION_ENV);
  6.  
  7. $options = $this->getApplication()->getOptions();
  8. $optionsMerged = $this->getApplication()->mergeOptions($options, $optionsModule);
  9. $this->getApplication()->setOptions($optionsMerged);
  10. }
  11. }

  1. class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
  2. {
  3. public function _initialize()
  4. {
  5. Bootstrap::mergeOptions('admin');
  6. }
  7. }

  1. class Blog_Bootstrap extends Zend_Application_Module_Bootstrap
  2. {
  3. public function _initialize()
  4. {
  5. Bootstrap::mergeOptions('blog');
  6. }
  7. }

itd...