为什么我的配置项没有从 codeigniter 中的 getenv() 条目填充?

jho*_*on4 5 php codeigniter environment-variables

我将 phpdotenv 与 Codeigniter 一起使用。Codeigniter 的环境设置不太适合这个项目。

我试图在我的 config.php 文件中设置它:

$config['site_id'] = getenv('APP_ID');
Run Code Online (Sandbox Code Playgroud)

phpdotenv 是通过 pre_system 挂钩加载的,并且 getenv('APP_ID') 在整个应用程序中可用。我还检查了核心,并且在加载配置项之前就触发了它。

$hook['pre_system'] = function() {
 $dotenv = new Dotenv\Dotenv(APPPATH);
 $dotenv->load();
};
Run Code Online (Sandbox Code Playgroud)

的价值$this-config->item('site_id')始终是NULL

任何关于为什么会发生这种情况的建议将不胜感激。

提前致谢。

bee*_*ree 1

正如 @jhodgson4 所说,CodeIgniter 在框架引导期间首先加载配置的常量 ( core/CodeIgniter.php)。index.php您可以在加载 CodeIgniter.php 之前在文件底部要求并初始化 dotenv 。这应该允许您在任何配置文件中使用 getenv。

// ...at the bottom of index.php
require APPPATH . 'vendor/autoload.php'; // composer installing into application/vendor

// Use FCPATH If your .env is in the same directory as index.php
// Use APPATH If your .env is in your application/ directory
$dotenv = Dotenv\Dotenv::createMutable(APPATH);
$dotenv->load();

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 */
require_once BASEPATH . 'core/CodeIgniter.php';

Run Code Online (Sandbox Code Playgroud)