-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Repository
github-actions[bot] edited this page Jul 15, 2026
·
1 revision
Единый интерфейс поверх $_ENV/$_SERVER/putenv/массива с иммутабельностью по
умолчанию — защита продакшн-окружения от подмены значений из файла.
Repository объединяет несколько адаптеров-источников. Чтение возвращает значение из
первого адаптера, где переменная найдена; запись идёт во все адаптеры. Иммутабельный
режим запрещает перезапись уже заданных переменных.
| Адаптер | Источник |
|---|---|
EnvConstAdapter |
$_ENV |
ServerConstAdapter |
$_SERVER |
PutenvAdapter |
getenv/putenv (влияет на дочерние процессы) |
ArrayAdapter |
массив в памяти |
use CloudCastle\Env\Repository\Repository;
$default = Repository::default(immutable: true); // $_ENV + $_SERVER + putenv
$isolated = Repository::inMemory(); // только память (для тестов)- Один интерфейс поверх четырёх источников.
- Изолированное хранилище в памяти не трогает суперглобалы — идеально для тестов.
- Иммутабельность по умолчанию — безопасность в проде.
-
delete()сообщает, существовала ли переменная (осмысленный результатclear()).
-
PutenvAdapterвлияет на дочерние процессы (proc_open,exec) — используйте осознанно.
- В тестах подменять хранилище изолированным:
Env::setRepository(new Repository([new ArrayAdapter($fixture)], false)), затемEnv::reset(). - Оставлять иммутабельность включённой в продакшене.
- Писать секреты в
PutenvAdapterпри запуске недоверенных подпроцессов — они унаследуют окружение. - Отключать иммутабельность в проде без явной необходимости (
overload).
flowchart LR
R[Repository] --> A1[EnvConstAdapter $_ENV]
R --> A2[ServerConstAdapter $_SERVER]
R --> A3[PutenvAdapter putenv]
R --> A4[ArrayAdapter память]
R -->|"чтение: первый с значением"| Read
R -->|"запись: во все (если mutable)"| Write
sequenceDiagram
participant A as Приложение
participant R as Repository
A->>R: set(NAME, value)
alt immutable и has(NAME)
R-->>A: false (не перезаписано)
else
R->>R: write во все адаптеры
R-->>A: true
end
| Возможность | Env | vlucas | symfony | josegonzalez | m1 | devcoder | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
Адаптеры $_ENV/$_SERVER/putenv
|
✅ | ✅ | 🔌 | ❌ | Env, vlucas | ||
| Иммутабельность | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Паритет |
| Изолированное хранилище в памяти | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | Паритет |
CloudCastle Env · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)