如何在zf2中设置多个环境

时间:2017-02-28 05:54:17

标签: php .htaccess zend-framework configuration zend-framework2

因此我在.htaccess

中使用了这个
SetEnv APP_ENV development

和i config's个文件

 $env = getenv('APP_ENV');
if($env == 'development'){
//do something
}else{
//someting else
}

但现在事情变得更加丑陋,因为有多种环境:

  1. 开发
  2. 测试
  3. 生产
  4. 服务器1
  5. 服务器2
  6. 并且对于每个环境,都有不同的database settings和其他设置 那么有没有比在任何地方更改.htaccess文件更好的解决方案?

1 个答案:

答案 0 :(得分:2)

我可以向你推荐我的架构:

我们不使用.htaccess,而是在我们的虚拟主机中使用虚拟主机和定义,例如:

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "c:/wamp/www"
    SetEnv APPLICATION_ENV "development"
    <Directory c:/wamp/www>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

从这里开始我的配置:

// application.config.php
        'config_glob_paths' => array(
            sprintf('config/autoload/{,*.}{global,%s,local}.php', $env),
        ), 

其中$env等于:

$env = getenv('APPLICATION_ENV') ?: 'development';

您的配置/自动加载/文件取决于您的环境(示例):

制作:

  • orm.production.php

预生产:

  • orm.preproduction.php

<强>开发

  • orm.development.php

<强>测试

  • orm.testing.php

orm是您的数据库配置。 (我使用学说)

doctrine.global.php中,当我想加载数据库配置的环境参数时,我有这个:

//doctrine.global.php
    'doctrine' => array(
        'connection' => array(
          'orm_default' => array(
            'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver',
            'params' => include "orm.{$env}.php",
          ),
        ),

确保这些文件未使用您的git / mercurial / anythingelse(忽略的文件)进行版本化

然后你很高兴。