Skip to content

Feature Validation

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

✅ Валидация

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

Текучая проверка присутствия и формата обязательных переменных с агрегацией всех ошибок в одно исключение — fail-fast при старте приложения.

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

Validator (через Env::required() или Dotenv::required()/ifPresent()) проверяет набор имён. Каждый метод проверяет все переменные набора и при нарушениях бросает ValidationException со списком всех проблем сразу.

Env::required(['APP_KEY', 'DB_HOST'])->notEmpty();
Env::required('DB_PORT')->isInteger();
Env::required('APP_ENV')->allowedValues(['dev', 'staging', 'prod']);
Env::required('LOG_LEVEL')->allowedRegexValues('/^(debug|info|warning|error)$/');
Метод Условие
assert() переменная задана
notEmpty() значение не пустое (после trim)
isInteger() целое число
isFloat() дробное или целое
isBoolean() булев литерал (регистр не важен)
allowedValues([...]) входит в список
allowedRegexValues('/…/') соответствует шаблону

Плюсы

  • Все ошибки собираются и сообщаются разом — не по одной за прогон.
  • Текучая цепочка: ->notEmpty()->isInteger().
  • ifPresent() проверяет только заданные переменные (необязательные настройки).

Минусы

  • Каждый метод применяется ко всему набору имён; для разных правил на разные переменные создавайте отдельные цепочки required().

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

  • Валидировать конфигурацию один раз при старте приложения (fail-fast), до подключений к БД/внешним сервисам.

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

  • Смешивать несовместимые правила в одной цепочке: Env::required('PORT')->isInteger()->isBoolean()'5' не булев, бросит.

Схема фичи

flowchart LR
    N["набор имён"] --> C{"для каждого имени"}
    C -->|"не задана"| E1["ошибка: обязательна"]
    C -->|"предикат провален"| E2["ошибка: формат"]
    C -->|"ок"| OK["продолжить цепочку"]
    E1 --> AGG["агрегировать все ошибки"]
    E2 --> AGG
    AGG --> EX[ValidationException]
Loading

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

sequenceDiagram
    participant A as Приложение
    participant V as Validator
    A->>V: required([...])->notEmpty()->isInteger()
    V->>V: проверить все имена, собрать ошибки
    alt ошибки есть
        V-->>A: throw ValidationException (список)
    else
        V-->>A: $this (цепочка продолжается)
    end
Loading

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

Возможность Env vlucas symfony josegonzalez m1 devcoder 🏆 Победитель
Обязательные переменные ⚠️ Паритет
isInteger/isBoolean/isFloat ⚠️ Env, vlucas
allowedValues/regex Env, vlucas

Clone this wiki locally