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