Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Nadpisanie opcji pochodzące z application.ini w zależności od modułu
Sajrox
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 7
Dołączył: 9.10.2007
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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...

Ten post edytował Sajrox 27.06.2011, 08:31:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 12:38