Size: a a a

2021 March 31

СО

Светлана Окунева... in symfony
Помогите новичку, пожалуйста
Мне нужно проверить тип контента и токен

Я сделала по инструкции

https://symfony.com/doc/current/event_dispatcher/before_after_filters.html

Когда обрашаюсь из постмана или curl  - 502
а в профайлере вижу то, что я хотела  - 415 Exception  

Куда копать ?
источник

ПГ

Павел Г. in symfony
Шурик
Почему Email не может быть объектом-VO, чтоб его попросту нельзя было создать невалидным?
Вот теперь у  меня вопрос. В DTO шку, которая еще в контроллере создается, можно пихать сразу VO или делать это уже в службе?
источник

ПГ

Павел Г. in symfony
Т.е. в DTO делать типизацию на примитивах или сразу на VO ?
источник

CB

Chiki Briki in symfony
Павел Г.
Вот теперь у  меня вопрос. В DTO шку, которая еще в контроллере создается, можно пихать сразу VO или делать это уже в службе?
Ну как ты в контроллере создашь комплексную ДТО, которая для создания требует какие-то доп данные (из базы, из АПИ)
источник

ПГ

Павел Г. in symfony
Chiki Briki
Ну как ты в контроллере создашь комплексную ДТО, которая для создания требует какие-то доп данные (из базы, из АПИ)
VO email например
источник

CB

Chiki Briki in symfony
Ой, комплексную VO
источник

Ш

Шурик in symfony
Chiki Briki
Ну как ты в контроллере создашь комплексную ДТО, которая для создания требует какие-то доп данные (из базы, из АПИ)
десериалайзером, например
источник

ПГ

Павел Г. in symfony
Тут скорее вопрос в слоях, а не в возможности
источник

Ш

Шурик in symfony
Павел Г.
Вот теперь у  меня вопрос. В DTO шку, которая еще в контроллере создается, можно пихать сразу VO или делать это уже в службе?
бизнесовая служба должна работать с бизнес-логикой.
преобразование 'foo@gmail.com' в инстанс VO - вряд ли это бизнес-логика
источник

ПГ

Павел Г. in symfony
Шурик
бизнесовая служба должна работать с бизнес-логикой.
преобразование 'foo@gmail.com' в инстанс VO - вряд ли это бизнес-логика
Звучит резонно, служба будет чище. Другое дело, что скорее всегои  в службе иногда придется создавать VO из примитивов (не из input DTO), и выходит что и там и там будет область создания VO
источник

CB

Chiki Briki in symfony
Павел Г.
Короче я потерялся в тоге к чему мы пришли :) Соглашусь, что лучше сначала валидировать массив. (В симфони можно кстати формы использовать под это дело) . Далее конкретно в валидации особо смысла не вижу. Там уже должны быть бизнес правила и они все отрубят жестко.
Че я думаю по итогу. У нас есть несколько вариантов вхождения в метод службы:
1. апи эндпоинт, принимает какие-то данные
2. внутренняя логика, которая эти данные как-то генерирует

У нас есть ДТО (для АПИ = контракт), которая создается по определенным правилам (типы, required поля и т.д.)
Во время создания ДТО мы можем развалиться.

Если мы хотим исчерпывающий отчет по ошибки для случая 1 - валидируем входные данные на момент соблюдения контракта до создания ДТО
Если человек по каким-то причинам создает невалидную ДТО в рамках внутренней логики - он получит ошибку процесса маппинга на ДТО, захочет - обработает

Дальше у нас идут правила, которые должны быть соблюдены для корректной работы метода службы. Их можно делать как через VO, возможно можно делать их через validate->(DTO) на входе и т.д.

Как итог: обьект (инстанс службы) через свой метод (проверки вызываемые в нем) должен проверять правила требуемые для конкретного юз кейса. Таким образом, как по мне, дубликация правил валидации на обоих слоях будет сведена к минимуму и риск некорректной работы сервиса тоже.

Шо скажемс?
источник

AD

Andrey Dembitskyi in symfony
Светлана Окунева
Помогите новичку, пожалуйста
Мне нужно проверить тип контента и токен

Я сделала по инструкции

https://symfony.com/doc/current/event_dispatcher/before_after_filters.html

Когда обрашаюсь из постмана или curl  - 502
а в профайлере вижу то, что я хотела  - 415 Exception  

Куда копать ?
в логи
источник

ПГ

Павел Г. in symfony
Chiki Briki
Че я думаю по итогу. У нас есть несколько вариантов вхождения в метод службы:
1. апи эндпоинт, принимает какие-то данные
2. внутренняя логика, которая эти данные как-то генерирует

У нас есть ДТО (для АПИ = контракт), которая создается по определенным правилам (типы, required поля и т.д.)
Во время создания ДТО мы можем развалиться.

Если мы хотим исчерпывающий отчет по ошибки для случая 1 - валидируем входные данные на момент соблюдения контракта до создания ДТО
Если человек по каким-то причинам создает невалидную ДТО в рамках внутренней логики - он получит ошибку процесса маппинга на ДТО, захочет - обработает

Дальше у нас идут правила, которые должны быть соблюдены для корректной работы метода службы. Их можно делать как через VO, возможно можно делать их через validate->(DTO) на входе и т.д.

Как итог: обьект (инстанс службы) через свой метод (проверки вызываемые в нем) должен проверять правила требуемые для конкретного юз кейса. Таким образом, как по мне, дубликация правил валидации на обоих слоях будет сведена к минимуму и риск некорректной работы сервиса тоже.

Шо скажемс?
Что такое невалидная ДТО? Особенно если она типизированая.
источник

Ш

Шурик in symfony
Chiki Briki
Че я думаю по итогу. У нас есть несколько вариантов вхождения в метод службы:
1. апи эндпоинт, принимает какие-то данные
2. внутренняя логика, которая эти данные как-то генерирует

У нас есть ДТО (для АПИ = контракт), которая создается по определенным правилам (типы, required поля и т.д.)
Во время создания ДТО мы можем развалиться.

Если мы хотим исчерпывающий отчет по ошибки для случая 1 - валидируем входные данные на момент соблюдения контракта до создания ДТО
Если человек по каким-то причинам создает невалидную ДТО в рамках внутренней логики - он получит ошибку процесса маппинга на ДТО, захочет - обработает

Дальше у нас идут правила, которые должны быть соблюдены для корректной работы метода службы. Их можно делать как через VO, возможно можно делать их через validate->(DTO) на входе и т.д.

Как итог: обьект (инстанс службы) через свой метод (проверки вызываемые в нем) должен проверять правила требуемые для конкретного юз кейса. Таким образом, как по мне, дубликация правил валидации на обоих слоях будет сведена к минимуму и риск некорректной работы сервиса тоже.

Шо скажемс?
поищи и этом чате по слову "валидация" и юзернейму "fes0r")
много раз уже это обсасывали в этом чате) и в прошлом году и в позапрошлом и еще раньше)
источник

ПГ

Павел Г. in symfony
Шурик
поищи и этом чате по слову "валидация" и юзернейму "fes0r")
много раз уже это обсасывали в этом чате) и в прошлом году и в позапрошлом и еще раньше)
Спасибо за совет, тоже так сделаю)
источник

CB

Chiki Briki in symfony
Павел Г.
Что такое невалидная ДТО? Особенно если она типизированая.
"Если человек по каким-то причинам создает невалидную ДТО в рамках внутренней логики" - из массива создает ДТО, а в массиве required поле не проставлено
источник

ПГ

Павел Г. in symfony
Chiki Briki
"Если человек по каким-то причинам создает невалидную ДТО в рамках внутренней логики" - из массива создает ДТО, а в массиве required поле не проставлено
У нас логика упадет по 500 или другому экзепшену, так как потом где то все равно упадет до коммита транзакции. Увидим в логах - профит. Смысла просто нет ради ошибки программиста ставить валидацию
источник

CB

Chiki Briki in symfony
Павел Г.
Спасибо за совет, тоже так сделаю)
Пинганешь, как найдешь? А то чет туго у меня с этим)
источник

ПГ

Павел Г. in symfony
Chiki Briki
Пинганешь, как найдешь? А то чет туго у меня с этим)
Да там куча сообщений, все тыкать надо :)  Но одно подтверждение минимум есть:  то что валидировать надо массив.
источник

AK

Anton K. in symfony
кстати нифига не просто валидировать объект по runtime списку constraints
источник