我想使用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值,则可以毫无问题地获取它们。