我有一个添加了此库的Phalcon项目:https://github.com/vlucas/phpdotenv。该库旨在从.env文件加载一些环境变量。我创建了这样一个文件并将其放入我的项目中。
VERSION_NUMBER=3.14
DATABASE_HOST=localhost
DATABASE_NAME=test
DATABASE_USER=root
DATABASE_PASS=root
我将loader.php
文件重写为以下代码:
<?php
$loader = new \Phalcon\Loader();
/**
* We're a registering a set of directories taken from the configuration file
*/
$loader->registerNamespaces(array(
'Test\Models' => $config->application->modelsDir,
'Test\Controllers' => $config->application->controllersDir,
'Test\Forms' => $config->application->formsDir,
'Test\Classes' => $config->application->classesDir,
'Test\Classes\Excel' => $config->application->excelDir,
'Test' => $config->application->libraryDir
));
$loader->register();
// Use composer autoloader to load vendor classes
require_once __DIR__ . '/../../vendor/autoload.php';
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->required(['DATABASE_HOST', 'DATABASE_NAME', 'DATABASE_USER', 'DATABASE_PASS']);
$dotenv->overload();
在我的配置文件中,我用环境变量替换了键:
'database' => array(
'adapter' => 'Mysql',
'host' => getenv('DATABASE_HOST'),
'username' => getenv('DATABASE_USER'),
'password' => getenv('DATABASE_PASS'),
'dbname' => getenv('DATABASE_NAME')
),
我可以在我想要的地方回显getenv('VERSION_NUMBER')
并且每次都有效,但是当我尝试使用这个配置文件时,变量是空的。我做错了什么?
答案 0 :(得分:4)
根据您提供的源代码摘录判断,没有理由说它不应该起作用。我只能做出假设,但由于我目前正在开发一个使用Dotenv的项目,我想指出两种可能性。
首先,我不确定您为何使用overload()
方法。在public/index.php
:
define('APP_PATH', realpath('..'));
include APP_PATH . '/vendor/autoload.php';
$dotenv = new Dotenv\Dotenv(APP_PATH);
$dotenv->load();
这让我想到了问题的第二个也是最可能的来源:
您正在loader.php
文件中加载Dotenv。在大多数Phalcon示例项目中,在配置之后加载一个,因此您的Env变量尚未在该点设置。包括我在index.php
中提到的代码,您应该做得很好。