Всем привет! Есть концептуальный вопрос по валидации входных данных на

контроллере.
Выше был вопросы/обсуждения по гидратору, но там не смог до конца выловить ответ.

Допустим на контроллер влетает JSON-пачка кривых данных.
{"name": 78, "age": "very old"}

Эти данные должны попасть в объект, который будет дальше передана на валидацию (и затем в сервисный слой).
class Person
{
public function __construct(
#[Required]
#[Length(min: 2)]
public string $name;

#[Number(min: 21)]
public int $age;
) {
}
}

Проблема в том, что код упадёт с TypeError ещё на этапе попытки присвоения данных (из-за несоответствия типов). И до валидатора не доедет. Получается нужно писать отдельный обработчики для ошибок валидации и TypeError.

Как только мы не изощрялись, чтобы обойти это: и валидировать входной массив до присвоения, и заводить отдельный нетипизированный объект для валидации, потом перекладывать в типизированный. И просто перехватывать TypeError на этапе населения, конвертировать в исключение валидации. Везде свои нюансы, неудобные и не всегда очевидные.

Решение: Нужно что-то типа гидратора, который населяет объект данными, которыми может (сверяет типы через рефлексию). Валидирует данные в объекте и объединяет результат с ошибками, которые в объект не попали.

Вопрос: Прежде чем самому писать свой велосипед, хотелось бы узнать. Есть какие-то готовые решения-либы для этого? Может Yii Validator что-то похожее умеет? Или это вообще по-другому решается как-то. Буду сильно благодарен за советы.

1 ответов

11 просмотров

https://t.me/yii3ru/83938 - вот это оно по идеи

Похожие вопросы

Обсуждают сегодня

Всем привет) Я попробовал турбо роутер октябрьский. Вроде доволен, но возникла проблемка) Бутстраповские модалки плодят .modal-backdrop элементы Если модалка открыта, должне...
Виталий
3
Так а кто может спарсить всех участников чата? Идишники
Magic
18
да пофиг на капчу зашел в чат и молчишь при этом ты нонейм? пошел вон
Magic
17
Я тебе про общие вопросы, а не про узконаправленные . Ты че будешь в чате спрашивать как хтмл разметку сделать?!
rusteg
3
Как удалить health check в Consul? Казалось бы, это должно быть не сложно, но я не могу найти в документации ничего про это, только про добавление service с health check "в н...
Roman
2
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
13
Privet! Mozhet jesti ideji - nemogu sdelatj upload backup s filestore cerez WEB. Fail okolo 450mb, eto mozhet bitj prichinoi? Nemogu ponjatj..kak zagruzitj backup... Poluchaju...
Matiss 🤘 Black Oak IT 🌳 Batumi 🌴 Latvija
5
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Хотя вроде админка показывает удаленные модели, да? @dblackCat
Виталий
2
Нужно магазин с тильды на опен кат перенести Есть кто умеет? В лс
Magic
8
Карта сайта