Skip to content

Feature Filters

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

🧹 Фильтры имён

← Возможности · Главная · Сравнение

Преобразование имён переменных после разбора: префикс, регистр, переименование по карте и произвольный callable — изоляция переменных в своём пространстве имён.

Принцип работы

Фильтры (FilterInterface) применяются загрузчиком к разобранному массиву по порядку, до записи в хранилище; результат одного фильтра передаётся следующему.

Фильтр Действие
PrefixFilter добавляет префикс к именам
LowercaseKeyFilter имена к нижнему регистру
UppercaseKeyFilter имена к верхнему регистру
RemapKeysFilter переименовывает по карте соответствий
CallableFilter произвольное преобразование функцией
use CloudCastle\Env\Dotenv;
use CloudCastle\Env\EnvParser;
use CloudCastle\Env\Repository\Repository;
use CloudCastle\Env\Filter\PrefixFilter;
use CloudCastle\Env\Filter\RemapKeysFilter;

new Dotenv(Repository::inMemory(), new EnvParser(), [__DIR__ . '/redis.env'], [
    new RemapKeysFilter(['HOST' => 'SERVER']),
    new PrefixFilter('REDIS_'),
]);

Плюсы

  • Изоляция переменных одного файла в своём пространстве имён (PrefixFilter).
  • Приведение к единому регистру при работе с разными источниками.
  • CallableFilter — любая логика, включая отбор подмножества переменных.

Минусы

  • Фильтры меняют только имена, не значения; для преобразования значений — приведение типов при чтении.

✅ Рекомендуется

  • Группировать переменные подсистемы префиксом, чтобы избежать коллизий: new PrefixFilter('DB_').

❌ Антипаттерны

  • Переименовывать так, чтобы два разных имени схлопнулись в одно — последнее значение перезапишет предыдущее без предупреждения.

Схема фичи

flowchart LR
    P["разобранные переменные"] --> F1[RemapKeysFilter]
    F1 --> F2[PrefixFilter]
    F2 --> F3[LowercaseKeyFilter]
    F3 --> R["в хранилище"]
Loading

Жизненный цикл

sequenceDiagram
    participant D as Dotenv
    participant F as цепочка фильтров
    participant R as Repository
    D->>D: parse(content) → массив
    loop по фильтрам
        D->>F: apply(массив)
        F-->>D: преобразованный массив
    end
    D->>R: записать переменные
Loading

Сравнение с аналогами

Возможность Env vlucas symfony josegonzalez m1 devcoder 🏆 Победитель
Префикс/регистр/переименование Env, josegonzalez
Произвольный callable-фильтр Env, josegonzalez

Clone this wiki locally