Zend application.ini

时间:2011-01-06 09:04:53

标签: php zend-framework

我更喜欢使用本机php进行Zend配置。 我如何将这个Zend application.ini段转换为php?

[development : production]

生产部分据说继承自开发部分。 P.S我们在这里谈论ZEND框架。

更新:我的问题看起来不太清楚。

我想知道的是,与ini或xml相比,Zend_Application如何处理php选项文件中的继承/嵌套。

INI配置示例 (生产部分的所有内容都将由测试和开发部分继承):

[production]
autoloaderNamespaces[] = "My_"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

[testing : production]
bootstrap.class = "productionBootstrap"

[development : production]
bootstrap.class = "developmentBootstrap"

XML配置示例 (生产部分中的所有内容都将由暂存部分继承,注释extends关键字):

<?xml version="1.0"?>
<configdata>
    <production>
        <webhost>www.example.com</webhost>
        <database>
            <adapter>pdo_mysql</adapter>
            <params>
                <host>db.example.com</host>
                <username>dbuser</username>
                <password>secret</password>
                <dbname>dbname</dbname>
            </params>
        </database>
    </production>
    <staging extends="production">
        <database>
            <params>
                <host>dev.example.com</host>
                <username>devuser</username>
                <password>devsecret</password>
            </params>
        </database>
    </staging>
</configdata>

PHP配置示例 没有继承/嵌套? 有没有办法在不进行手动数组合并的情况下进行继承/嵌套工作?

return array(
    'production' => array(
         $test1 => 'aaaaaaa'
     ),
    'staging' => array(
        $test2 => 'bbbbbb'
    ),
    'testing' => array(
        $test3 => 'bbbbbb'
    )

)

更新

回想起来 - 只是想补充说使用php数组而不是ini文件进行配置有一定的优势: some info

·它们可以通过操作码缓存来缓存

·它们支持常量

·它们允许创建易于阅读的配置树

·它们支持布尔值和整数值

2 个答案:

答案 0 :(得分:1)

Zend_Config中有一个支持标量的补丁。

由于多种原因,补丁未被接受进入干线,因此无法保证不会产生任何副作用。该补丁也相当陈旧,因此可能需要进行一些调整才能使其与最新版本的Zend_Config一起使用。

为了了解如何解决问题,它可能会有所帮助。

答案 1 :(得分:1)

我不确定你的意思,但你可以在你的php文件中使用你的配置模拟这个:

$configProduction = array(
    'database' => $db1,
    'url'      => 'www.production.com',
);

$configDevelopment = array(
    'url' => 'www.test.com',
);

//ENV is set in bootstrap or htaccess or php.ini
switch (APPLICATION_ENV) {
    case 'production':
        $config = $configProduction;
        break;
    case 'development':
        $config = array_merge($configProduction, $configDevelopment);
        break;
}