Nikolay
/** * @Assert\Callback() */ public function validate(ExecutionContextInterface $context, $payload) { ... }
Ассерты в сущности не надо использовать
A
в доке подсмотрел https://symfony.ru/doc/current/reference/constraints/Callback.html
Nikolay
поясните пожалуйста?
Что валидируется?
A
В дто
есть какие-то примеры? ссылки?) не совсем представляю, как это выглядит. т.е. поля сущности в отдельную дто, туда валидацию, а потом сама дто внутри сущности будет?
Ivan
Имхо такая валидация уже внутри сервиса, который будет отрабатывать этот кейс
Konstantin
A
Мой кейс: Форма регистрации пользователя, сделана на основе обычных форм, форма привязана к сущности пользователя. При регистрации, необходимо проверить EMAIL в произвольном блок-листе, и вывести сообщение.
Konstantin
пишите @Assert-ы и валидаторы-сервисы
https://symfony.com/doc/current/validation/custom_constraint.html
Konstantin
в идеале атрибуты Assert надо вешать не на сущность, а на дто (форм-модель)
Konstantin
но в любом случае, это надо писать за пределами сущности, она не про то, чтобы делать запросы во внешние сервисы и все такое
Иван
а валидаторы, которые вешаются на дто, могут что угодно проверять и разные сервисы инжектить не только банальный синтаксис по регулярке
A
https://symfony.com/doc/current/validation/custom_constraint.html
но ведь это просто реализация своего ассерта
Иван
Nikolay
можно пожалуйста пример, или ссылку где можно посмотреть правильную архитектуру ?
Могу свой репозиторий скинуть, где есть простой пример реализации, но там не симфони
Иван
только более сложные валидаторы вешаются прямо на команду
Иван
какое полезное я сделал тестовое задание раз 10 уже кидаю
Nikolay
Прямо атрибутами валидация дто, интересно получилось
Иван
а вызов валидации в миддлваре
Nikolay
а вызов валидации в миддлваре
Он там получается самым первым из всех должен идти?
Nikolay
да
Хорошая идея
A
понял, спасибо всем
Nikolay
Это чтобы не дергать validator.validate в каждом контроллере
Nikolay
Nikolay
или в хендлере
А все таки где предпочтительнее валидацию делать в контроллере или хэндлере?
Иван
А все таки где предпочтительнее валидацию делать в контроллере или хэндлере?
в хендлере, потому что эндпоинтов триггерящих команду может быть более одного
Иван
но в миддлваре ещё лучше
Иван
либо через стек миддлвари, либо через абстрактного предка хендлеров, с жёстким сценарием, писать вызов валидатора каждый раз - потенциально забыть и пропустить
Иван
ага, и тестировать проще
Иван
если 'messenger.middleware.doctrine_transaction', в тестовом окружении пропускать
Nikolay
Такой риторический вопрос, что то в доке симфони антипаттерны встречаются местами
Иван
ну не надо так строго, мы все идём по этой дороге впервые и правильную архитектуру нащупываем вместе
Иван
просто надо понимать, что в самых раскрученных книгах не истина в последней инстанции
Konstantin
Такой риторический вопрос, что то в доке симфони антипаттерны встречаются местами
что-то сделано в угоду простоты разработки. например, кеш относительно удобен. а код там - жуткая блевота
Konstantin
примеры - это самые базовые штуки. вам показали пример коллбек-ассерта, а вы им внешние сервисы дергаете
Konstantin
вроде это не проблемы симфони :)
Роман
что-то сделано в угоду простоты разработки. например, кеш относительно удобен. а код там - жуткая блевота
Почти любой кеш - это костыль, которым прикрывают места с кривой архитектурой и неоптимизироаанные куски кода. )
Konstantin
я про его кишки исключительно
Роман
я про его кишки исключительно
Это уже другая сторона медали. Костыль из костылей и лапши - такое в любых фреймворках/цмс и библиотеках хватает...
Юра
Кеш это просто способ оптимизировать приложение. Причем тут костыли?
Роман
Кеш это просто способ оптимизировать приложение. Причем тут костыли?
Оптимизированное приложение должно работать нормально в рантайме без кэша (за исключением единичных специфических случаев). Если руководствоваться этим правилом, то как-то все лучше начинает работать. А вот создание кэша любого уровня над приложением - это признак того, что в приложении что-то не так. Соответственно, кэш является костылем... Это лично мое мнение, никому его не навязываю.
Иван
потому что кеш - часть оптимизации приложения
Иван
классический пример - кеш готовой страницы с кештегами или мы смотрим в быстрые хранилища и отдаём готовый результат или перерендериваем вообще всё
Иван
в том числе данные из дорогих по времени доступа внешних источников
Роман
Иван
или дашбоард статистики за день/неделю/месяц
Роман
За что
За такое.)
Nikolay
За такое.)
Ничего непонятно, но очень интересно
Роман
или дашбоард статистики за день/неделю/месяц
Да, сразу в картинку, чего уж там...
Юра
Ты используешь кеш? Несите сюда рукоотрыватель! )
Юра
В любом хайлоаде есть кеш
Роман
Юра
И это просто необходимость
Иван
кстати, а индексы в базе - это ж тоже кеш такой
Юра
Просто способ сохранить такты процессора
Иван
нахер индексы
Nikolay
Нет. Даже в браузере выключен
Тарас ктл, мы вас узнали
Юра
Это быстрый доступ, но его не нужно инвалидировать значит не кеш
Роман
В любом хайлоаде есть кеш
Это и есть специфический случай. Сколько процентов сайтов работают в хайлоаде?
Юра
Браузеры кешируют статику. Так что почти все )
Роман
Nikolay
Кто есть тарак?
Тарас, опечатался