2015-09-05 38 views
2

我添加了此庫的Phalcon項目:https://github.com/vlucas/phpdotenv。該庫旨在從.env文件加載一些環境變量。我創建了這樣的文件並將其放入我的項目中。環境變量在Phalcon Config中不起作用

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(); 

而且在我的配置文件I替換爲環境變量鍵:

'database' => array(
    'adapter' => 'Mysql', 
    'host'  => getenv('DATABASE_HOST'), 
    'username' => getenv('DATABASE_USER'), 
    'password' => getenv('DATABASE_PASS'), 
    'dbname' => getenv('DATABASE_NAME') 
), 

我可以附和getenv('VERSION_NUMBER')哪裏我希望它每次都能正常工作,但是當我嘗試使用這個配置文件時,變量是空的。我究竟做錯了什麼?

+0

爲什麼不檢測config.php中的當前url並在那裏定義規則?我有點懷疑(如果有人有權訪問腳本,他也必須使用.env文件),我的意見 –

+0

因爲我喜歡能夠設置全局變量的想法,並且因爲我們有很多不同的客戶端,所以我認爲這是更清潔的解決方案。我沒有這樣做,因爲所謂的「增加的安全性」。 – user4992124

回答

2

從源代碼摘錄中可以看出,它沒有理由不適用。我只能做出假設,但由於我目前正在開發一個使用Dotenv的項目,所以我想指出兩種可能性。

首先,我不確定你爲什麼使用overload()方法。這是完全足以載入Dotenv像這樣在你public/index.php

define('APP_PATH', realpath('..')); 
include APP_PATH . '/vendor/autoload.php'; 

$dotenv = new Dotenv\Dotenv(APP_PATH); 
$dotenv->load(); 

這使我對你的問題的第二個和最可能的來源:

你加載Dotenv在loader.php文件。在大多數Phalcon示例項目中,在配置之後加載該項目,因此您的Env變量尚未設置。包括我在index.php中提到的代碼,你應該很好。