Konstantin
или "вы ввели в поле фио одно, а данные по ИНН в соседнем поле выдают другую имя-фамилию"
Konstantin
Вот это валидация в дто или нет?
я может сплю уже, не пойму причем тут дто или не дто
Пилот
Ага, только это ближе к БЛ и я заалкаю такое явно, а не в дтошку и под валидацию
Я бы тоже ближе к бл заимплементил) потом кинуть исключение, например. Почему не так?
Konstantin
это вроде не совсем к вопросу относится. хоть к массиву
Павел
я может сплю уже, не пойму причем тут дто или не дто
Мы говорим о валидации, которая прописывается в ДТО комманды
Konstantin
исключениями валидировать - грешновато, во-первых, так мы не можем получить цепочку ошибок, во-вторых, ну ребят, это довольно тяжело. ладно там пхп сраное, его не жалко, умрет все равно в конце запроса
Konstantin
а жвм дрочить исключениями дело неблагодарное, я вас уверяю
Кирилл
Фабьен, нам не хватает встроенных валидаторов Скузи, но напиши нам новых
Konstantin
она от этого впадает не в очень веселое состояние, сбрасывает кеши всякие, статистику и вообще прилично (до 10%) садится в производительности
Павел
И как потом подать это исключение пользователю?
Как и любое другое? Или у тебя не может быть исключений в приложении?
Кирилл
С любовью
Konstantin
Как и любое другое? Или у тебя не может быть исключений в приложении?
исключение - это исключительная ситуация. неверно заполненная форма - это штатная ситуация
The Ant
Как и любое другое? Или у тебя не может быть исключений в приложении?
Ну вот по твоей логике, юзернейм существует, при создании нового. Потому что валидатор не сходил в базу. Куда приписать это исключение?
Пилот
Уровни валидации примерно такие у меня ща: Фронт клиент (Юи) -> простой валидейшн на уровне до вызова контроллера с помощью argument resolver -> валидация в usecase/domain соответственно)
Павел
исключение - это исключительная ситуация. неверно заполненная форма - это штатная ситуация
Я инн верно заполнил, он валидный. То что он по какойто базе не прошел - я как юзер в душе не знаю
Пилот
И ошибки либо до вызова контроллера есть, либо потом исключением кидаю из апликейшен/домен
Павел
Ну вот по твоей логике, юзернейм существует, при создании нового. Потому что валидатор не сходил в базу. Куда приписать это исключение?
В идеале у меня упадет по констрейнту, который трансформируется в нормальное исключение на уровне БЛ, а потом исключение трансформирую в респнс на уровне ExceptionSubcriber или Normalizer
Иван
исключение - это исключительная ситуация. неверно заполненная форма - это штатная ситуация
спорно исключениями удобно или придётся каждое обращение за сущностью оборачивать проверкой, что сущности может не быть
Павел
А надо подписать под инпутом что юзернейм существует... Упс и ты в жопе
В какой жопе? Я не понимаю. Если мне надо вывести под определенным инпутом - то трансформирую в нормалайзере или еще где. А вообще это сообщение можно вывести и не под инпутом а ниже а форме.
Павел
А надо подписать под инпутом что юзернейм существует... Упс и ты в жопе
Ты опять свяхываешь логику приложения, с выводом
Павел
А если мне надо вывести в одном месте под инпутом, а в другом нет?
Пилот
Павел
Как ты трансформируешь исключение? Или на каждый чих свое придумаешь? ))
Может быть не надо придумывать странную апи? А вообще на каждый чих свое исключение по хорошему
Пилот
Если нет - исключение?)
The Ant
Может быть не надо придумывать странную апи? А вообще на каждый чих свое исключение по хорошему
Все верно. Исключения нужны если у тебя прод посыпался )) в остальных случаях нужна валидация
Пилот
Как ты трансформируешь исключение? Или на каждый чих свое придумаешь? ))
У меня в каждом исключении есть gerErrors, а сами исключения ловятся в error exception handler
Пилот
И выводится там жсонреспонсом
Пилот
Довольно просто все) symfony event listener
Пилот
На десяток строк
The Ant
Ну ну. И потом в апи бардак
Пилот
Все верно. Исключения нужны если у тебя прод посыпался )) в остальных случаях нужна валидация
Так валидация это сборное понятие, в разных слоях происходит, на разных уровнях
Павел
Ууу, жесть
Если не придумывать странные апи, то все просто - из всех щелей кидаются исключения. Исключения наследуются от базового, базовое перехватывается и отрисовывается
Пилот
Ты наверное в целом про валидацию хттп ака валидацию порта
Пилот
Типа ports/adapters
Пилот
Гексагонал) или как там
Пилот
На базовом уровне проверяешь реквест на уровне перед контроллером например, или внутри но перед запуском юзкейса
Павел
1 формат ошибок, зачастую хватает. На крайняк можно что-то накрутить для разного отображения. Например от версии, или от клиента. Хотя могут быть разные кейсы, но однозначно надо избавляться от болейрплейта в виде копипаста, который потом придется когда то менять и бегать по всему коду.
Пилот
А в юзкейсе, в целом в апликейшен и доменных слоях уже своя валидация может быть
Павел
даже cannot connect to mysql server 1.2.3.4 with password 'password' ? )
Это 500, хотя и такое можно отловить и вывести по своему. Это не исключение логики приложения
Пилот
даже cannot connect to mysql server 1.2.3.4 with password 'password' ? )
В плане? Ну доктрина такое кидает) я не кидаю
Павел
Павел
Ну и опять таки, в случае аргумент рехолвера - мусор в одном месте, а не копипастой везде
The Ant
Я не про резолвер, это некая удобная магия доступная не везде. Я про твой массив ручной
Ну а куда засунуть проверку есть/нет ошибки валидации вообще
Павел
Ну а куда засунуть проверку есть/нет ошибки валидации вообще
1) Можешь кидать экзепшен, минимум у тебя уйдет проверка на колчиество ошибок в контроллере 2) Я больше писал про ['errors'=>['validation'=> $errors]] или что у тебя там было. Этот массив в каждом контроллере писать - ну это неее.
Павел
Ну не в аргумент ресолвер же это делать
Причем тут аргумент резолвер? Я вообще за него не топил, просто показал, что можно сократить.
The Ant
Эксепшоны с гет еррорс я пожалуй пропущу )
Павел
Так куда это засунуть?
Твой котроллер можно сделать так, если работать с исключениями: $validator->validate($dto); // тут кидается исключение, можешь использовать свои два валидтора чтобы они создавали разные исключения валидации, или с разными параметрами, или сразу форматировали ошибку. $action()
The Ant
Отчасти зря
Вообще не зря. У екскпшона уже есть ошибка, и есть трейс. Он там не просто так. Мандячить туда ещё и свою коллекцию с хуй пойми какими ошибками уже лишнее
The Ant
Не понял связи трейса и ошибок )
Связь в самом понятии "исключение"
Пилот
Есть BadRequestException например со списком fields
Павел
Связь в самом понятии "исключение"
Есть удобный механизм поднятия ошибок наверх. Почему бы им не пользоваться
Пилот
Есть какой нибудь доменный эксепшен
Пилот
Есть инфраструктурные
The Ant
А ещё есть просто здравый смысл
Пилот
А ещё есть просто здравый смысл
А где исключения и как должны использоваться?)
The Ant
Например у тебя база отвалилась. Явно не штатная ситуация
The Ant
Или скрипт по техническим причинам не в состоянии продолжать работу
Павел
Например у тебя база отвалилась. Явно не штатная ситуация
Так это не твое исключение, это не тсключение твоего приложения
The Ant
Для того трейс и придуман. Чтобы указать где именно произошел факап
The Ant
При том )
Павел
Бля не тот скрин)
Павел