2015-09-05 1 views
2

У меня есть проект Phalcon с этой библиотекой: https://github.com/vlucas/phpdotenv. Эта библиотека предназначена для загрузки некоторых переменных среды из файла .env. Я создал такой файл и поместил его в свой проект.Переменные окружения, не работающие в конфигурации Phalcon

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

Почему бы не обнаружить текущий url в config.php и определить правила там? Я немного скептически настроен (если у кого-то был доступ к скриптам, который он также должен был бы делать с файлами .env), мое мнение –

+0

Поскольку мне нравится идея установить глобальные переменные и потому что у нас есть много разных клиентов и, следовательно, URL-адреса, поэтому я думаю, что это более чистое решение. Я не делаю этого из-за так называемой «добавленной безопасности». – 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, и вам должно быть хорошо.