контроллере (json), симфони у меня как api
====
типа у меня есть контроллер и я четко хочу прописать какие параметры могут там быть, есть ли готовое решение или самому велосипедить в 50 строк?
Валидатор
мне получается на каждый входящий запрос писать свой класс и для него обозначать допустимые данные? этож еще логику надо перевода данных с json в класс писать...
Тебе получается надо читать доку.
symfony/validator + symfony/serializer
Так, раз ты прочитал, то почему такой вопрос? Да, если ты хочешь типизировать значения, то создаёшь класс (его обычно дто называют), над полями описываешь валидацию, мапишь на него джсон с помощью symfony/serializer, потом отдаёшь валидатору. Если класс не нужен, валидируешь массив, как тут показано https://symfony.com/doc/current/validation/raw_values.html, а сериалайзер не используешь.
спасибо большое, вот теперь хороший ответ и можно галочкой отметить =) смысл в том, что я могу наговнокодить, а так хотяб плюс-минус буду понимать. как положено "по феншую", на пет проекте я прям в контроллере мог проверить, а ты щас обьяснил как можно с другой стороны сделать
FosRestBundle ещё посмотри, много полезностей там
Удобнее argument resolver
Валидацию входящих данных делаешь с помощью автовалидации "дто-аргументов". Всю специфичную валидацию выносишь в другое место и валидируешь там. Чуть подробнее: В dto ставишь ассерт на то, что тип, длина, формат, значение то, которое контроллер ожидает. Дальше собираешь отдельную дто, подоходящую под твой "запрос" от приложения: создать сущность, модифицировать, вызвать цепочку действий или прочее. Непосредственно перед вызовом логики делаешь валидацию. Пример: Экшен добавляет IP адрес в БД, если он не существует. В итоге имеем: Перед вызовом экшена контроллера проверяется (делает фреймворк), что значение в поле является IP-адресом (например). Перед вызовом use-case'а проверяем (делаешь ты), что этот IP адрес уже добавлен в БД.
Обсуждают сегодня