Чтобы добавить поддержку env, вы можете использовать это расширение https://github.com/vlucas/phpdotenv
Просто установите его
composer.phar require vlucas/phpdotenv
Создать .env
файл. Он должен быть в .gitignore
и недоступен из Интернета. Если вы используете базовые или расширенные шаблоны, поместите его с yii.bat
в корень проекта. Также вы можете создать .env.example
с пустыми переменными.
YII_DEBUG=1
YII_TRACE_LEVEL=3
YII_ENV=dev
Затем добавьте его в свой index.php вот так
require_once __DIR__ . '/protected/vendor/autoload.php';
$factory = new Dotenv\Environment\DotenvFactory([
new Dotenv\Environment\Adapter\EnvConstAdapter(),
]);
// Specify path to directory with .env file here (for advanced you should up twice)
\Dotenv\Dotenv::create(__DIR__ . DIRECTORY_SEPARATOR . '/../', null, $factory)->load();
defined('YII_DEBUG') or define('YII_DEBUG', (bool) $_ENV['YII_DEBUG']);
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', $_ENV['YII_TRACE_LEVEL']);
defined('YII_ENV') or define('YII_ENV', $_ENV['YII_ENV']);
Я рекомендую использовать только EnvConstAdapter. Причина $_SERVER
переменная регистрируется, и getenv()
некоторое время имеет пустые значения в запросах параллелизма.
Небольшое улучшение для bool
, null
и пустых строк. Добавьте это до $factory
инстанцирования и используйте env()
вместо $_ENV
.
if (!function_exists('env')) {
/**
* Gets the value of an environment variable.
* @param string $key
* @param mixed $default
* @return mixed
*/
function env($key, $default = null)
{
if (!isset($_ENV[$key])) {
return $default;
}
$value = $_ENV[$key];
switch ($value) {
case 'true':
case '(true)':
return true;
case 'false':
case '(false)':
return false;
case 'empty':
case '(empty)':
return '';
case 'null':
case '(null)':
return null;
default:
return $value;
}
}
}