【问题标题】:Zend application.iniZend 应用程序.ini
【发布时间】:2011-01-06 09:04:53
【问题描述】:

我更喜欢使用原生 php 进行 Zend 配置。 我如何将此 Zend application.ini 段转换为 php?

[development : production]

据推测生产部分继承自开发部分。 P.S 我们这里说的是 ZEND 框架。

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

我只想知道 Zend_Application 与 ini 或 xml 相比如何处理 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 配置示例 (生产部分的所有内容都将被暂存部分继承,注意扩展关键字):

<?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

· 它们可以被操作码缓存缓存

· 他们支持常量

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

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

【问题讨论】:

  • 您为什么更喜欢使用它? Zend 框架为 ini 和 xml 文件提供了出色的配置实现。
  • 恕我直言 1) 我不认为 php 比 raw.ini 复杂得多 2) 例如处理布尔值更容易 - 在 ini 中一切都是字符串。 3)这是获取变量的最快方式。
  • 为什么投反对票? Downvoter - 想解释一下反对票吗?
  • 1/ 也许不是,但您要求重新发明轮子。它不是那么简单,否则你就不会在这里,你会继续使用.ini 2/ 在 PHP 中没有任何东西是强类型的,所以这没有意义
  • 能否请您澄清您在解决方案中寻找的内容。你想从 .ini 转换成另一种格式还是想知道如何解析这样的块?

标签: php zend-framework


【解决方案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;
}

【讨论】:

  • 应该是 array_merge_recursive 以允许覆盖子数组中的键。
  • 例如,DASPRiDhis blog application 中使用array_merge_recursive()
  • 谢谢。我只是不确定 Zend_Application 是否根据环境处理数组键合并。但是在查看代码之后 - 它没有。感谢您的回答:)
【解决方案2】:

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

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

如果您想了解如何解决该问题,这可能会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多