Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Konfiguracja zasobów modułu
Forum PHP.pl > Forum > PHP > Frameworki
Astarot
Witam, chciałbym aby każdy moduł mojej aplikacji łączył się z inną bazą danych.
W tym celu przygotowałem ustawienia pliku konfiguracyjnego application.ini zgodnie(jak mi się wydaje) z dokumentacją ZF.

  1. resources.modules[] = "";
  2. default.resources.db.adapter = "pdo_mysql"
  3. default.resources.db.params.host = "localhost"
  4. default.resources.db.params.username = "root"
  5. default.resources.db.params.password = "*****"
  6. default.resources.db.params.dbname = "baza1"
  7. default.resources.db.params.charset = "utf8"
  8.  
  9. computer.resources.db.adapter = "pdo_mysql"
  10. computer.resources.db.params.host = "localhost"
  11. computer.resources.db.params.username = "root"
  12. computer.resources.db.params.password = "********"
  13. computer.resources.db.params.dbname = "baza2"
  14. computer.resources.db.params.charset = "utf8"


Jednak zawsze ładowane są zasoby z modułu computer, mimo tego, że aplikacja
wie w jakim module się znajduje, gdyż na stronie z błędem spowodowanym próbą
połączenia się z tabelą która znajduje się w innej bazie są wyrzucane parametry rządania

  1. Request Parameters:
  2.  
  3. 'controller' => 'index',
  4. 'action' => 'index',
  5. 'module' => 'default',
  6. 'email' => '',
  7. 'pass' => '',
  8. )


Czy ktoś może wie w jaki sposób mogę zmusić ZF aby skorzystał w wybranym module z przygotowanych dla niego zasobów?
IceManSpy
Nie wiem, czy jest prosty sposób.
Możesz wykorzystać to:
http://framework.zend.com/manual/en/zend.a...sources.multidb
I w zależności od modułu pobierać dany resource.
Astarot
Dzięki za odpowiedź, niestety nie udało mi się rozwiązać problemu przydzielania zasobów modułowo i wykorzystałem już rozwiązanie multidb.
Niestety generuje ono dużo więcej kodu niż to opisane w manualu. Trzeba konfigurować zasoby w bootstrap następnie w Zend_Db_Table_Abstract ustawiać adapter.

Podeślę swoje rozwiązanie gdyby ktoś kiedyś potrzebował

bootstrap
  1. class Default_Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  2. {
  3. //...
  4. protected function _initDatabases()
  5. {
  6. $resource = $this->getPluginResource('multidb');
  7. $resource->init();
  8. Zend_Registry::set('computer', $resource->getDb('computer')); // pol. nie ustawione jako domyślne
  9. }
  10. }


Zend_Db_Table dla mapperów
  1. class Computer_Model_DbTable_ComputerSite extends Zend_Db_Table_Abstract
  2. {
  3. protected $_name = 'computer_site';
  4.  
  5. protected function _setupDatabaseAdapter()
  6. {
  7. $this->_db = Zend_Registry::get('computer');
  8. parent::_setupDatabaseAdapter();
  9. }
  10. }


w Zend_Db_Table które wykorzystują połączenie ustawione jako domyślne nie musimy niczego dopisywać.

  1. resources.multidb.nazwa.default = true
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.