如何使ZF2 db凭据环境特定

时间:2013-09-20 12:13:10

标签: php git configuration zend-framework2 environment-variables

我正在开始一个新项目。

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

这是我的部署过程:

  • 我在本地机器上开发
  • 然后我推送到我的公共github存储库
  • 然后我使用deployhq.com将这些部署到我的作品中 服务器,用户可以看到所做的更改。

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

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

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

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

1 个答案:

答案 0 :(得分:5)

在Zend 2中有

  1. 全局配置文件&
  2. 模块级配置文件
  3. 如果您想了解其用途,可参考以下链接

    How does configuration works in ZF2

    当我有相同的场景时,我使用上面的链接来理解和利用Zend Config模块,这对于处理这种情况非常有用。

    创建两个文件

    production.php local.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。",local} .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']
     ));
    

    如果使用配置数组连接整个应用程序中的数据库 您不必担心环境变化,只需确保您的vhost文件中有Apache APPLICATION_ENV条目

    您可以通过在apache vhost文件中添加以下行来实现此目的

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

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

    https://github.com/ZendExperts/ZeDb

    管理您的CRUD应用程序

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