可能的重复:
如何使用zend框架在控制器上读取应用程序.ini
application.ini
是采埃孚中的配置文件。我有更多的设置,而不仅仅是采埃孚手册写的那些默认值。但是,例如,如何从操作控制器中检索这些参数?在会话期间在哪里存储此配置更好?
Bootstrap_Abstract
类具有getOptions()
方法,该方法返回读取application.ini
文件的简单 php 数组:
$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。但我想避免在Zend_Application
已经读过application.ini
之后再读一次Zend_Config_Ini
。但是Bootstrap
或Zend_Application
类不提供从application.ini
自动创建 ArrayObject 的功能。
第二,我可以把这$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
但这似乎有点低效:我在Bootstrap
中以通常的 php 数组的形式有一个application.ini
的副本,还有一个相同application.ini
的副本,但在Zend_Registry
中也以 ArrayObject 的形式存在。并且必须执行两个步骤才能从我的配置中获取参数。如何更有效地解决这个问题?
使用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
希望有帮助。