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'
resources.layout.layout = 'blog/layout'
Plugin w którym poróbuje to zrobić wygląda tak:
<?php class System_Plugin_InitModule extends Zend_Controller_Plugin_Abstract { public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { $moduleOptions = new Zend_Config_Ini(APPLICATION_PATH . '/' . $request->getModuleName() . '/configs/application.ini', APPLICATION_ENV); $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); $options = $bootstrap->mergeOptions( $bootstrap->getOptions(), $moduleOptions->toArray() ); $bootstrap->setOptions($options); } }
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)
class Bootstrap extends Zend_Application_Module_Bootstrap { { $optionsModule = new Zend_Config_Ini(APPLICATION_PATH . '/' . $module . '/configs/application.ini', APPLICATION_ENV); $options = $this->getApplication()->getOptions(); $optionsMerged = $this->getApplication()->mergeOptions($options, $optionsModule); $this->getApplication()->setOptions($optionsMerged); } }
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap { public function _initialize() { Bootstrap::mergeOptions('admin'); } }
class Blog_Bootstrap extends Zend_Application_Module_Bootstrap { public function _initialize() { Bootstrap::mergeOptions('blog'); } }
itd...