11

可能重复:
如何使用 zend 框架读取控制器上的 application.ini

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's 并准确返回 ArrayObject 的类。但无论如何application.ini,我想避免再读Zend_Config_Ini一次。Zend_Application但是BootstraporZend_Application类不提供从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

但这似乎有点低效:我有一个以通常 php 数组形式存在application.iniBootstrap副本和一个相同application.ini但以 ArrayObject 形式存在的副本Zend_Registry。并且必须执行两个步骤才能从我的配置中获取参数。我怎样才能更有效地解决这个问题?

4

1 回答 1

28

使用,您可以使用如下代码从应用程序中的任何位置(控制器、插件、模型等)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

希望有帮助。

于 2012-10-15T19:02:59.977 回答