Поддержите проект, сделав пожертвование

Типобезопасный каст значений из env() в config

Вы когда-нибудь ловили TypeError, просто потому что .env вернул строку вместо числа? Или получали неожиданное поведение из-за опечатки в булевом флаге falose вместо false?

🚨 Проблема

В файле .env можно задать некорректные значения, которые затем попадают в конфиг. В результате приложение может неожиданно падать с ошибкой 500 или вести себя непредсказуемо.

Пакет sushi-market/smart-cast

🔗 github.com/sushi-market/smart-cast

Этот пакет решает проблему: мы можем добавить уровень типобезопасной валидации и каста прямо в конфиг файлах. Если значение в .env невалидно — приложение сразу упадёт понятной ошибкой, а не в случайный момент времени.

Сейчас у нас есть два основных каста: stringToInt и stringToFloat
Передавая параметры в функцию, мы можем строго проверять значения в момент каста:

sign – если передано, то ограничивает значение только положительным или отрицательным. Полезно, например, для настройки TTL, который не может быть отрицательным.

strictType – по умолчанию true
При true каст "123.45" в int вызовет ошибку. Если указать false, значение будет приведено, но лучше оставлять строгий режим.

acceptsZero – по умолчанию true
Если установить false, ноль вызовет ошибку. Удобно для параметров вроде port.

acceptNull – по умолчанию false Если true, то переданный null вернёт null вместо исключения – полезно для опциональных значений в конфиге.

Примеры использования

  1. Валидация числового значения:
    Интервал должен быть целым положительным числом больше 0.
'default_interval_length' => stringToInt(
    value: env('INTERVALS_DEFAULT_LENGTH', 15),
    sign: \DF\NumberSign::POSITIVE,
    acceptsZero: false,
),
  1. Валидация булевого значения:
    debug может быть только true или false. Это исключает опечатки вроде falose, которые интерпретатор воспримет как true.
'debug' => stringToBoolean(
    value: env('APP_DEBUG', false),
),

Пакет можно использовать не только в конфигурационных файлах, но и в любом месте кода, однако именно в конфиге его польза проявляется особенно ярко.

0

Вакансии

Партнёры и друзья

Помощь в разработке вашего проекта на Laravel

Независимо от сложности проекта эти кампании помогают сообществу и всем его участникам воплощать идеи в элегантные приложения.

Присоединиться

Инструменты для управления эмоциями, которые помогают людям контролировать свою жизнь и лучше понимать себя.

Перейти

Подкасты c зажигательными эпизодами, которые заставят задуматься и приведут к новым перспективам.

Перейти

Делятся опытом, находят друзей и обсуждают разработку и сопровождение любых бэкендов на PHP.

Перейти