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