Lumen 5.4,MySql&泊坞窗。我在全局env
$ printenv
DB_HOST=127.0.0.1
DB_DATABASE=database
etc
我的项目中的 .env
也存在,但它们具有不同的值。
如果我输入修补程序env('DB_HOST')
,它会从全局环境中输出值,但是当应用程序运行时,它将从指定的.env
文件中获取。我认为问题存在于Laravel\Lumen\Application
中的以下函数中:
/**
* Load a configuration file into the application.
*
* @param string $name
* @return void
*/
public function configure($name)
{
if (isset($this->loadedConfigurations[$name])) {
return;
}
$this->loadedConfigurations[$name] = true;
$path = $this->getConfigurationPath($name);
if ($path) {
$this->make('config')->set($name, require $path);
}
}
如何覆盖这些值或使其避免这些条件:isset($this->loadedConfigurations[$name])
?
答案 0 :(得分:0)
我仍然认为,就我的评论而言,答案仍然是一样的。如果您希望使用docker环境变量而不是本地.env变量,那么config目录仍然是可行的方法。在这种情况下,您似乎希望定位database host
。所以,让我们这样做:
在config/database.php
文件中,更改以下内容:
'mysql' => [
//...
'host' => getenv('DB_HOST') ?: env('DB_HOST', 'defaultvalue')
]
然后只通过配置文件引用主机。
config("database.mysql.host");
如果存在ENV,您将从docker容器中获取ENV,否则您将从DB_HOST
文件中获得.env
声明。