Skip to content

Examples

github-actions[bot] edited this page Jul 15, 2026 · 1 revision

Примеры

Практические сценарии использования cloudcastle/env.

Интерполяция переменных

DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=app
DB_NAME=main
DATABASE_URL=postgres://${DB_USER}@${DB_HOST}:${DB_PORT}/${DB_NAME}
use CloudCastle\Env\Env;

Env::load(__DIR__ . '/.env');
Env::getString('DATABASE_URL'); // postgres://app@127.0.0.1:5432/main

Одинарные кавычки отключают интерполяцию, \$ вставляет литеральный доллар:

LITERAL='no ${INTERP} here'
PRICE="\$5.00"

Каскад файлов .env.env.local

use CloudCastle\Env\Dotenv;
use CloudCastle\Env\EnvParser;
use CloudCastle\Env\Repository\Repository;
use CloudCastle\Env\Repository\Adapter\ArrayAdapter;

$repository = new Repository([new ArrayAdapter()], immutable: false);

// .env.local перекрывает .env (мутабельное хранилище)
(new Dotenv($repository, new EnvParser(), [
    __DIR__ . '/.env',
    __DIR__ . '/.env.local',
]))->load();

Для иммутабельного каскада порядок обратный: первым грузится приоритетный источник (например, секреты), и он не перезаписывается более общими значениями.

Кастомный фильтр

use CloudCastle\Env\Filter\CallableFilter;

// Оставить только переменные с префиксом FEATURE_
$onlyFeatures = new CallableFilter(
    static fn (array $vars): array => array_filter(
        $vars,
        static fn (string $name): bool => str_starts_with($name, 'FEATURE_'),
        ARRAY_FILTER_USE_KEY,
    ),
);

Строгая валидация конфигурации при старте

use CloudCastle\Env\Env;

Env::load(__DIR__ . '/.env');

Env::required(['APP_KEY', 'DB_HOST', 'DB_PORT'])->notEmpty();
Env::required('DB_PORT')->isInteger();
Env::required('APP_ENV')->allowedValues(['dev', 'staging', 'prod']);
Env::required('LOG_LEVEL')->allowedRegexValues('/^(debug|info|warning|error)$/');

// Любое нарушение — ValidationException со списком всех проблем сразу

Проверять только присутствующие переменные

use CloudCastle\Env\Dotenv;

$dotenv = Dotenv::createImmutable(__DIR__ . '/.env');
$dotenv->load();

// Проверить формат только тех, что заданы (необязательные)
$dotenv->ifPresent(['SENTRY_DSN', 'REDIS_URL'])->notEmpty();

Типизированное чтение списков

TRUSTED_PROXIES=10.0.0.1,10.0.0.2,10.0.0.3
$proxies = Env::getList('TRUSTED_PROXIES');          // ['10.0.0.1', '10.0.0.2', '10.0.0.3']
$flags   = Env::getList('FEATURE_FLAGS', [], '|');   // произвольный разделитель

Clone this wiki locally