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

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

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

Bootstrap_Abstract класс имеет getOptions() метод, который возвращает простой массив PHP чтения application.ini файл:

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

И я хотел бы получить элемент формы в стиле oop:

$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

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

Другие вопросы по тегам