如何使 ZF2 数据库凭据特定于环境


How to make ZF2 db credentials environment specific

我正在开始一个新项目。

我正在使用 ZF2。我刚刚安装了它并启动并运行了 Skeleton 应用程序。

这是我的部署过程:

  • 我在本地计算机上开发
  • 然后我推送到我的公共 github 存储库
  • 然后,我使用 deployhq.com 将它们部署到我的生产中服务器,这是用户将看到所做的更改的地方。

试图在博客等上查看堆栈,zend站点和谷歌,但仍然对我的问题没有任何真正的理解或解决方案。

我希望应用程序根据其环境使用不同的数据库凭据。 例如,如果在"dev"上,我的本地机器,则使用凭据 A,但如果在实时服务器上,则使用凭据 B。

我已经阅读了很多关于全局和本地自动加载配置文件等的信息,但请记住我的 github 存储库是公开的,任何我提交带有我的数据库详细信息的配置文件的地方都是可见的。

想知道是否有一种方法可以拥有相同的理论,带有数据库连接的全局和本地文件,出于安全原因,我手动上传生产详细信息,而不是通过 git,并告诉 git 以某种方式忽略本地配置文件?我还需要知道如何根据环境和位置告诉应用程序使用这些配置文件。

在 Zend 2 中有

  1. 全局配置文件 &
  2. 模块级配置文件

如果你想知道那里的使用,你可以参考下面的链接

ZF2 中的配置如何工作

当我遇到相同的场景时,我使用上面的链接来了解和利用 Zend Config 模块,这对于处理这种情况真的很好。

创建两个文件

生产.php本地.php

在这两个文件中

根据环境返回此数组

return array(
     "dbname" => "yourdbname"
     "dbhostname" => "dbhostname"
     "dbusername" => "yourdbusername",
     "dbpassword" => "yourdbpassword"
 );

在 zend framewrok 应用程序的 config/autoload/目录中

稍后按照以下说明编辑您的 config/application.config.php 文件

从 Apache vhost 文件中获取应用程序 env(这里您可以在 apache vhost 文件中设置为生产或本地)

$applicationEnv = getenv('APPLICATION_ENV');

$environmentSpecificConfigPath = "config/autoload/{,*.}{".$applicationEnv.",本地}.php";

下一个在配置数组中传递特定于环境的配置路径

 'config_glob_paths' => array($environmentSpecificConfigPath)

在任何控制器或操作中

你可以使用以下代码

 $configArray = $this->getGlobalConfig(); 

现在,$configarray拥有创建连接的所有数据库凭据

$adapter = new Zend'Db'Adapter'Adapter(array(
    'driver' => 'Mysqli',
    'database' => $configArray['dbname'],
    'username' => $configArray['dbusername'],
    'password' => $configArray['dbpassword']
 ));

如果使用配置数组连接整个应用程序中的数据库您无需担心环境更改,只需确保虚拟文件中有一个 Apache APPLICATION_ENV条目即可。

您可以通过在Apache虚拟文件中添加以下行来做到这一点

 SetEnv APPLICATION_ENV "production" // in your production server 
 SetEnv APPLICATION_ENV "local"  // in your local 

最后但并非最不重要的是,您可以使用Zend专家模块ZeDB

https://github.com/ZendExperts/ZeDb

管理 CRUD 应用程序

希望以上步骤可以帮助您创建环境