在中间件内核构造函数中访问 .env 环境变量


Accessing .env environment variables in the middleware kernel constructor

似乎在Middleware Kernel constructor()中,即使我可以访问env('')助手,我在 .env 文件中设置的所有变量都返回 null。

为什么会这样?

我实际上想在我的 .env 中设置一个中间件读取的配置,以便于本地开发行为。

这就是我在我的 Http''Kernel 中所做的

public function __construct(Application $app, Router $router)
{
    if (env('check_env_key', false)) {
    }
    parent::__construct($app, $router);
}

我在Laravel 5.2应用程序中也有同样的事情。我在xdebug的帮助下深入研究了代码。

回答您的问题"为什么会这样"?

如果你看一下 HttpKernel 构造函数(它是内核的父级),你会看到 env 值尚未加载。请参阅 xdebug 中的 $_ENV 容器或转储它。

因此,为您收集值的 php 函数 (getenv) 将返回 false。并且,由于该错误,Laravel env 助手将返回默认值。

路线在 routes 文件中,$_ENV 容器填充了所有 env 值,因此返回了预期值。

这是一个时间问题。预期的行为在内核中尚不可用。这就是为什么... :-)

我认为 Laravel 在引导应用程序时加载 env 值,而不是之前。