Zend配置继承

时间:2011-10-16 05:55:18

标签: zend-framework zend-config

我的application.ini

中有这些值
[production]
; Database;
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user1"
    resources.db.params.password = "password1"
    resources.db.params.dbname = "projects__01"


;Names
    website.settings.websiteName = "My website 1"
    website.settings.websiteUrl = "http://www.mydomain1.com"
    website.settings.title = "mydomain.com - mydomain"
    website.settings.titleSeperator = " - "


[staging : production]
; Database;
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user2"
    resources.db.params.password = "password2"
    resources.db.params.dbname = "projects__02"

;Exceptions
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1

;Title and url
    website.settings.websiteName = "My website 2"
    website.settings.websiteUrl = "http://www.mydomain2.com"


[development : staging]
;Database
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "user3"
    resources.db.params.password = "password3"
    resources.db.params.dbname = "projects__03"


;Title and url
    website.settings.websiteName = "My website 3"
    website.settings.websiteUrl = "http://www.mydomain3.com"

问题是所有数据库和异常值都正常工作,这意味着它们应该正确继承

但是我为Title和url设置的值没有正确继承,只使用了第一个定义的值。

这是为什么?这是设计的吗?只是预定义/标准环境值,如数据库和异常是否继承?

或者我在某处犯了错误?

1 个答案:

答案 0 :(得分:1)

好的,从您的评论中可以看出,您在引导程序中创建了一个新的Zend_Config对象,将其放入注册表中,而这就是没有返回您期望的内容。如果是这种情况,我猜你在配置对象上省略了第二个参数,所以你有这样的东西:

$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini');

但你应该拥有的更像是这样:

$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini', APPLICATION_ENV);

第二个参数告诉它使用配置文件的哪个部分,但不会总是得到相同的值。

但是,您实际上并不需要重新解析配置文件,因为Zend Application已经这样做了。相反,您可以从引导类访问选项并使用它们来创建对象(或者只是以现有的数组格式存储选项):

protected function _initConfig()
{
    $config = new Zend_Config($this->getOptions());
    Zend_Registry::set('config', $config);

    return $config;
}

这应该像你期望的那样工作。

如果我猜错了,请你编辑你的问题,以包括你的引导程序的相关部分,其中创建配置对象并存储在注册表中。