在Cakephp 2 database.php中使用环境变量

时间:2019-06-04 10:08:30

标签: docker cakephp environment-variables

我想使用docker和环境变量使我的项目更具可扩展性。我正在使用最新版本的CakePhp 2,并且我的项目在docker中也运行良好。现在,我想创建一个.env文件,其中存储数据库名称,数据库用户,数据库密码,Salt值等信息,然后通过docker容器的配置创建。创建.env文件并读取CakePhp中的值很容易。我创建了一个名为.env的文件,并将其放入app文件夹中。看起来像

//.env in app folder
{
    "DB_USER" : "user",
    "DB_PASS" : "password"
}

然后我使用以下功能将.env文件中的信息放入bootstrap.php中的环境中:

//bootstrap.php Putting env infos to the env from the .env file
if(is_file(APP . DS . '.env')) {
    $vars = json_decode(file_get_contents(APP . DS . '.env'), true);
    foreach ($vars as $name => $val) {
        putenv("$name=$val");
    }
 }

最后,我想从database.php调用环境信息

//database.php Get value from env
public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'host.docker.internal',
    'login' => env('DB_USER'),
    'password' => env('DB_PASS'),
    'database' => 'dbname',
    'prefix' => '',
    'encoding' => 'utf8',
);

很不幸,CakePhp不需要env()在database.php数组中,并返回消息Fatal error: Constant expression contains invalid operations in /var/www/html/test/app/Config/database.php on line 70。如何使用.env文件并调用环境信息,例如数据库配置?

如果我尝试从其他地方调用env值,则可以毫无问题地获取它们。

0 个答案:

没有答案