Как получить параметры из файла Zend application.ini во время сеанса?

Возможный дубликат:
Как можно прочитать application.ini на контроллере с использованием среды zend

application.ini - это файл конфигурации в ZF. У меня есть еще несколько настроек, кроме тех по умолчанию, о которых пишет руководство ZF. Но как я могу получить эти параметры от него, например, от моих контроллеров действий? И где лучше хранить эту конфигурацию во время сеанса?

Класс Bootstrap_Abstract имеет метод getOptions(), который возвращает простой php-массив файла read application.ini:

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

И я бы хотел, чтобы элемент выглядел так стильно:

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

ZF имеет класс Zend_Config_Ini, который читает .ini и возвращает именно объект ArrayObject. Но я бы хотел больше не читать application.ini с Zend_Config_Ini еще раз после того, как Zend_Application все равно уже прочитал его. Но классы Bootstrap или Zend_Application не предоставляют некоторого автоматического создания ArrayObject из application.ini.

И второй, где я могу сохранить этот $config, тогда? В Zend_Registry?

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

И затем в моем контроллере действия я его получаю:

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

Но это выглядит немного неэффективным: у меня есть одна копия application.ini в Bootstrap в виде обычного php-массива и одна копия того же application.ini, но в виде ArrayObject в Zend_Registry тоже, И нужно сделать два шага, чтобы получить параметр из моей конфигурации. Как я могу решить эту проблему более эффективно?

Ответ 1

Используя Zend_Controller_Front, вы можете получать информацию из application.ini из любого места приложения (контроллер, плагин, модели и т.д.), используя следующий код:

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

Скажите application.ini, что у вас есть несколько вариантов:

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

Затем вы можете получить доступ к этим значениям, используя указанную выше переменную $config:

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

Надеюсь, что это поможет.