10

Powiel możliwe:
How could read application.ini on controller using zend frameworkJak pobrać parametry z pliku Zend application.ini podczas sesji?

application.ini jest plik konfiguracyjny w ZF. Mam więcej ustawień niż te domyślne, o których pisze ZF manual. Ale jak mogę na przykład pobrać te parametry z moich kontrolerów akcji? I gdzie jest lepiej przechowywać tę konfigurację podczas sesji?

Klasa Bootstrap_Abstract ma getOptions() metodę, która zwraca prostą tablicę PHP odczytać application.ini plik:

$app = new Zend_Application(APPLICATION_ENV, '/application.ini'); 
$config = $app->bootstrap()->getOptions(); // $config is a php array of application.ini 

I chciałbym dostać elementem tworzą to oop-style:

$param = $config[one][two]; // vs. 
$param = $config->one->two; // like this 

ZF ma klasę Zend_Config_Ini, która czyta .ini i zwraca dokładnie ArrayObject. Ale chciałbym uniknąć czytania application.ini z Zend_Config_Ini jeszcze raz po tym, jak Zend_Application już to przeczytał. Ale klasy Bootstrap lub Zend_Application nie zapewniają automatycznego tworzenia obiektu ArrayObject z application.ini.

A druga, gdzie mogę przechowywać tę konfigurację $? W Zend_Registry?

Zend_Registry::set('config', $config); 

A potem w moim jakiegoś kontrolera akcji odzyskać go:

$config = Zend_Registry::get('config'); // I retrieve config 
$param = $config->one->two;    // I retrieve parameter from it and use it 

Ale wydaje się trochę nieefektywne: Mam jedną kopię application.ini w Bootstrap w formie zwykłej tablicy php i jeden kopia tego samego application.ini, ale również w postaci ArrayObject w Zend_Registry. I trzeba zrobić dwa kroki, aby uzyskać parametr z mojej konfiguracji. Jak mogę efektywniej rozwiązać ten problem?

+2

Zobacz także http://akrabat.com/zend-framework/accessing-your-configuration-data-in-application-ini/ – Phil

Odpowiedz

24

Korzystanie Zend_Controller_Front można pobierać informacje z application.ini z dowolnego miejsca w aplikacji (sterownik, wtyczki, modele itp) za pomocą kodu:

$config = Zend_Controller_Front::getInstance()->getParam('bootstrap'); 

mówią w application.ini miał kilka opcji tak:

apikeys.google.maps.id = "abc" 
apikeys.google.maps.key = "123456789" 
apikeys.twitter.oauth = "20jg9032jg9320gj30" 

następnie można uzyskać dostęp do tych wartości, stosując powyższą $config zmiennej:

$apikeys = $config->getOption('apikeys'); 
$mapsId = $apikeys['google']['maps']['id']; // abc 
$maksKey = $apikeys['google']['maps']['key']; // 123456789 
$twitKey = $apikeys['twitter']['oauth'];  // 20jg9032jg9320gj30 

Nadzieję, że pomaga.

+0

+1, ładne wyjaśnienie – SagarPPanchal