我正在开始一个新项目。
我正在使用ZF2。我刚安装它并启动并运行Skeleton应用程序。
这是我的部署过程:
我试图在博客等处查看堆栈,zend网站和谷歌,但仍然没有任何真正的理解或解决我的问题。
我希望应用程序根据其环境使用不同的数据库凭据。例如。如果在我的本地计算机上,则使用凭据A,但如果在实时服务器上,则使用凭据B.
我已经阅读了很多关于全局和本地自动加载配置文件等的内容,但是请记住我的github repo是公开的,任何我提交任何配置文件的地方都会显示我的数据库详细信息。
我想知道是否有办法,相同的理论,全局和本地文件与数据库连接,我手动上传生产细节,而不是通过git出于安全原因,并告诉git忽略本地配置文件不知怎的?我还需要知道如何告诉应用程序根据环境和位置使用这些配置文件。
答案 0 :(得分:5)
在Zend 2中有
如果您想了解其用途,可参考以下链接
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应用程序
希望上述步骤可以帮助您创建环境