Zend Framework将开发人员特定的环境信息与配置分开?

时间:2011-07-27 23:20:12

标签: php zend-framework configuration

我刚刚开始使用一个大型的Zend Framework项目。到目前为止,有一件事令我困惑:大部分配置似乎都存储在application/configs/application.ini的单个文件中。此文件包含应用程序功能所必需的各种内容,例如应用程序命名空间,控制器插件等,以及数据库登录详细信息。我有一些外部承包商,我需要在这个项目上工作,但我不希望他们拥有我的所有数据库细节。在Zend中,如何将环境信息(例如db logins(对于不同的开发人员可能不同)与应用程序配置(对每个人都相同)分开?

4 个答案:

答案 0 :(得分:8)

我同意在ZF中这比在应有的时候更难,希望这是一个将在未来版本中得到改进的领域。

与此同时,将两个配置文件与Zend_Config合并非常容易,这是您可以利用的优势。如果您打开public/index.php,您会在底部附近看到一个创建Zend_Application实例的部分。默认情况下,第二个参数是配置文件的完整路径,但您可以传入现有的Zend_Config对象。因此,您创建了两个配置对象:application.ini和environment.ini(无论您喜欢调用它们),将它们合并在一起,然后将其传递给Zend_Application:

$config = new Zend_Config_Ini(
    APPLICATION_PATH.'/configs/application.ini', 
    APPLICATION_ENV, 
    array('allowModifications' => true)
);
$environment = new Zend_Config_Ini(
    APPLICATION_PATH.'/configs/environment.ini', 
    APPLICATION_ENV
);

$config->merge($environment);

$application = new Zend_Application(APPLICATION_ENV, $config);
$application->bootstrap()
            ->run();

使用这种方法,您可以将所有标准内容保存在application.ini中,并将数据库内容移动到environment.ini。然后将application.ini保存在源代码管理中,将environment.ini添加到gitignore / svn:ignore,并创建一个虚拟环境.ini.dist,其他开发人员可以使用它来设置本地项目。

注意:如果出于性能原因在ZF的库文件中注释掉了require_once调用,则可能需要在public / index.php中的某些Zend_Config类中要求它才能生效。不过,从错误中可以看出这一点。

答案 1 :(得分:5)

我为Symfony和Zend所做的事情不是用这样的信息检查配置文件。

而是我制作config.dist文件,我保留在SVN / Git中,其中包含运行应用程序的所有必要信息,然后是敏感凭据的虚拟信息,以及不是。然后在每台机器上(本地开发,生产,登台)我将此文件复制到真正的cnfig文件名,并使用适当的环境特定详细信息对其进行编辑。

答案 2 :(得分:1)

我正在使用基于PHP的配置文件(application.php):

<?php
return array_merge_recursive(array(
    'bootstrap' => array(
        'phpSettings' => array(
            'display_startup_errors' => 0,
            'display_errors' => 0
        ),
    'path' => APPLICATION_PATH . '/Bootstrap.php',
        'class' => 'Bootstrap',
    )
    /** all other general config stuff as well **/
), include APPLICATION_PATH . '/configs/' . APPLICATION_ENV . '.php');

一个特定于环境的(例如development.php):

<?php
return array(
    'phpSettings' => array(
        'display_startup_errors' => 1,
        'display_errors' => 1,
        'error_reporting' => E_ALL,
    ),
    'resources' => array(
        /** log to browser only for development environment **/
        'log' => array(
            'Firebug' => array(
                'writerName' => 'Firebug',
                'filterName' => 'Priority',
                'filterParams' => array(
                    'priority' => Zend_Log::DEBUG
                )
            )
        ),
        'db' => array(
              /** Development Database settings, only need to overwrite the new ones **/
        )
    )
);

this page偷来的想法(你当然会忽略development.php)。

答案 3 :(得分:0)

您可以在ini中创建两个application/configs个文件。第一个文件application.ini包含大部分样板配置内容。第二个文件secrets.ini包含您的数据库密码以及您不想检查源控件的其他内容。您现在可以将application.ini文件检入源代码管理中。不要签入secrets.ini - 让您的VCS忽略它 - 并强制每个开发人员在他们的个人签出中从头开始创建该文件。

然后,您可以在application/Bootstrap.php类中编写一个方法来读取这两个文件,将它们合并到一个Zend_Config对象中,然后将该对象写入Zend_Registry

我不认为这个解决方案是理想的,但它在过去对我有用。