@symfony_php

Страница 639 из 1418
Sergey
13.02.2018
16:36:01
не дублировать выходит разве что для самых примитивных сценариев когда данные из формы отправляются 1:1 в апишку

Вадим
13.02.2018
16:36:21
да
Ух ... я думал юзаете серверную валидацию

Sergey
13.02.2018
16:37:02
Ух ... я думал юзаете серверную валидацию
это больше для того что бы фронтендер/мобильщик могли глянуть где они нафакапили

Google
Sergey
13.02.2018
16:37:15
им помогает

Вадим
13.02.2018
16:38:05
Тоесть если какая-то валидация поменяется, то надо править всех клиентов ... например минимальное количество букв. Как бе выглядит громоздко для такой правки

Sergey
13.02.2018
16:39:11
да и зачем тебе ограничивать минимальное количество букв? типа для пароля?

Andrey
13.02.2018
16:39:54
можем холивар

упрощать написание клиентов

Sergey
13.02.2018
16:40:34
но у меня слишком редко формы 1:1 json

Andrey
13.02.2018
16:40:55
или сходить с ума с обратной совместимостью при изменении требований

Вадим
13.02.2018
16:41:09
да и зачем тебе ограничивать минимальное количество букв? типа для пароля?
Нет, например минимальное количество букв для имени.

Sergey
13.02.2018
16:41:30
Нет, например минимальное количество букв для имени.
не пустая строка, зачем еще какие-то ограничения на имя?

можешь погуглить все эдж кейсы с валидацией имен

Вадим
13.02.2018
16:41:55
Было например 5, а потом пришел китаец у которого фамилия Lee и надо сделать на 3

Google
Sergey
13.02.2018
16:42:20
Было например 5, а потом пришел китаец у которого фамилия Lee и надо сделать на 3
а потом пришел чувак у которого ни фамилии ни отчества и зовут его "ф"

или амар абдул ибан хатабыч

повторюсь - хочешь унификации правил - тебе никто не мешает компилить из правил валидации json схему

Вадим
13.02.2018
16:43:32
а потом пришел чувак у которого ни фамилии ни отчества и зовут его "ф"
Ну вот ) Ну не суть, это я к тому что изза валидации входных данных, приходится пересобирать все сборки. Что в случае серверной валидации, было бы проще, т.к. менять придется только его.

Andrey
13.02.2018
16:44:26
ок. Вопрос к аудитории - как часто вы терпели, когда публичное апи вам на ваши запросы отвечало "Something went wrong"?

вот просто, вы юзали его долго, с болью написали клиент. А он через месяцок - 422 - Something went wrong

к примеру, air провайдер какой

было бы круто, если бы он вам нормальную мапу, что и где случилось?

Вадим
13.02.2018
16:45:49
повторюсь - хочешь унификации правил - тебе никто не мешает компилить из правил валидации json схему
А в чем профит, от серверной валидации? Ибо с одной стороны мимнимизация запросов на сервер, а с другой надо какйо-то конвеншнс дополнительный принимать с фронт командой, о том для какого ресурса какие правила брать.

Andrey
13.02.2018
16:47:45
так это да. Но мы говорим о дублировании на клиенте логики. И о том, что "нечасто меняются требования"

Вадим
13.02.2018
16:48:02
Sergey
13.02.2018
16:48:42
Ну вот ) Ну не суть, это я к тому что изза валидации входных данных, приходится пересобирать все сборки. Что в случае серверной валидации, было бы проще, т.к. менять придется только его.
если ты мне покажешь пример нормально реализованной серверной валидации на мобилках без необходимости пользователю отправлять запросы + вариант когда правила валидации зависят от введенных значений - тогда поговорим.

это разная логика

она может быть похожей или даже связанной

но не обязана быть дублированием

на клиенте ты валидируешь пользовательский ввод. И пользователь у тебя - реальный человек. НА сервере ты тоже валидируешь пользовательский ввод - и пользователь тут - мобилка или spa

то есть все красиво и просто если данные на всем этом пути имеют одинаковые правила и структуру

Google
Sergey
13.02.2018
16:50:40
но приходит упоротый UX дизайнер и говорит что "главное что бы пользователю было удобно"

что до нарушения обратной совместимости - тебе надо добавить новое обязательное поле - что будешь делать?

Andrey
13.02.2018
16:51:57
зависит от того, какой проект. Докину в схему новое поле

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

или им "flash" сообщениями показывать юзеру придётся

Sergey
13.02.2018
17:07:43
зависит от того, какой проект. Докину в схему новое поле
а как клиент его отрендрит? это выходит надо писать хрень которая под твой UI рендрит форму на основе json схемы

как бы задача выполнимая, но в реальности это на порядок сложнее чем заморачиваться с обратной совместимостью)

Вадим
13.02.2018
17:08:30
если ты мне покажешь пример нормально реализованной серверной валидации на мобилках без необходимости пользователю отправлять запросы + вариант когда правила валидации зависят от введенных значений - тогда поговорим.
ну вот "правила валидации зависящие от введенных значений" проще со стороны поддержки, если это будет на сервере. Ибо логика может быть разная. И елси логика сложная, то сапорт этой логики на нескольких клиентах и сервере будет адом. кмк

Andrey
13.02.2018
17:08:32
да. Захотят впилить "супер поле от дизайнера", будет маппер посредине. Фича -> схема

Andrey
13.02.2018
17:09:07
не хотят париться - будет автоматически всё

Вадим
13.02.2018
17:10:38
у нас сервер генерит json с правилами и клиент рендрит форму согласно этим правилам
А как у вас разделяются правила валидации? Типа на каждый урл, свой набор правил? Ибо по сущностям это плохо.

Petr
13.02.2018
17:10:55
у нас сервер генерит json с правилами и клиент рендрит форму согласно этим правилам
Мы так нашу oas3-доку парсим и отдаем как правила валидации по запросу OPTIONS

Зависимость есть, фронтендщик жив

Вадим
13.02.2018
17:12:27
Зависимость есть, фронтендщик жив
В таком случае вы всеравно на сервер запрос отсылаете, что б получить правила. Или вы их кешируете?

Petr
13.02.2018
17:15:29
В таком случае вы всеравно на сервер запрос отсылаете, что б получить правила. Или вы их кешируете?
Перед рендерингом формы клиент посылает OPTIONS-запрос, парсит правила валидации (они в формате JSON Schema, ну вы знаете, да), и проставляет у себя примитивные констрейнты (по длине, по обязательности заполнения, по регекспу и пр.). Этот запрос очень дешево нам выходит, потому мы решили не кэшировать правила валидации ни на бекенде, ни на фронтенде

Sergey
13.02.2018
17:16:03
А как у вас разделяются правила валидации? Типа на каждый урл, свой набор правил? Ибо по сущностям это плохо.
я ж вроде уже писал что валидирую сам запрос и потому логично что правила привязаны к конкретному экшену апишки

Petr
13.02.2018
17:17:44
Мы хотели, чтобы данные тестировались против JSON Schema (для этого сама спека и была создана, собсна), но на моменте построения фундамента фронтенда разработчик неправильно нас понял и сделал генерацию констрейнтов формы по возвращаемой схеме.

Google
Вадим
13.02.2018
17:21:06
Тоесть в вашем случае, сервер никогда не возвращает ошибки? А если есть сложная валидация?

Sergey
13.02.2018
17:21:26
есть валидация примитивная - типа поле не пустое или ты забыл чего написать, и есть валидация бизнес ограничений в духе "ты не можешь покупать чаще чем раз в 5 минут"

Вадим
13.02.2018
17:22:04
никакой говоришь?
Ну да, в серверной валидации +1 запрос, (если ввели данные не верно с первого раза), что там на options

Petr
13.02.2018
17:22:20
хм .. экономия от серверной валидации если все данные ввели верно с первого раз никакой. Хотя, идея интересная
У нас просто кейсы были такие, где надо было валидировать данные на лету. Есть формы с тучей полей и поля с ограничением в 65к символов. Согласитесь, не очень удобно, когда вы получаете ошибку после нажатия кнопки "отправить" для больших форм. Или когда заполняете поле на 70к символов, а там можно только 65к.

Admin
ERROR: S client not available

Sergey
13.02.2018
17:22:52
ему не надо ждать дополнительно 200-300ms (или до секунды в херовых сетях) что бы узнать что он накосячил

а вот options запрос он даже не заметит

Sergey
13.02.2018
17:23:53
то есть вся разница - когда происходит запрос и что при этом делает пользователь. Может уже тыкать пальцем в экран или вынужден ждать

Вадим
13.02.2018
17:24:04
а вот options запрос он даже не заметит
Почему, OPTIONS обладает магией? )

Sergey
13.02.2018
17:24:20
нет, просто ты можешь отрендрить, отправить options и применить правила валидации

за секунду среднестатистический пользователь успеет только осознать что от него хотят

Alan
13.02.2018
17:24:51
@fes0r видел у тебя фрактал от лиги, даже бандл приделал, а чем понравилось? с этим ведь и нормалайзер с массивчиками справляется и тоже добавляет промежуточный слой

Sergey
13.02.2018
17:24:51
но будет создаваться впечатление что все быстро

Google
Sergey
13.02.2018
17:25:09
композиция респонсов

я сильно его переделал под себя впоследствии

ps. фрактал внутри дикое говнище

Alan
13.02.2018
17:25:44
)))

Sergey
13.02.2018
17:26:16
у меня инклуды делались подзапросами на экшены контроллеров и потом склеивались + поддержка batch запросов что бы невилировать N+1 проблему

так у меня выходила очень модульная система

Вадим
13.02.2018
17:26:24
@fes0r @terron Хм .. да действительно с схемой круче получается.

Sergey
13.02.2018
17:26:46
)))
собственно по сути - по этой же причине мне нравится graphql и потому я медленно но верно пилю свою реализацию под симфони

Boris
13.02.2018
18:45:40
Привет всем, подскажите, пожалуйста. Есть сущность, в ней есть /** * @var \DateTime * @Gedmo\Timestampable(on="create") * @ORM\Column(type="datetime") */ private $createdAt; Как я могу сделать что-бы Timestampable срабатывал только если поле пустое? А если с значением - Timestampable игнорировался.

Boris
13.02.2018
18:48:48
Я бы с удовольствием, но в данный момент нужен именно такой рабочий костыль.

предлагаю ход конем - убрать это нахер и делать это явно в конструкторе
А, стоп, в конструкторе, я сначала прочел в контроллере.

Действительно, добавить одно условие в конструктор будет проще всего.

Спасибо.

Vlad
13.02.2018
19:19:42
что за условие?

Boris
13.02.2018
19:21:17
Если значение не пустое, не перезаписывать дату

Vlad
13.02.2018
19:23:02
я конечно не синиор

но $this->createdAt = new DateTime(); в конструкторе и без таймстемпабл совсем не вариант?

Boris
13.02.2018
19:24:01
Да, так и сделаю

Егор
13.02.2018
19:32:55
Где вы вызываете $entityManager->flush() ? Видел презентацию, где делали отдельный мидлвер для flush, в рабочих проектах постоянно вижу, что flush вызывается прям в репозиториях. Как мне кажется, перечёркивается весь смысл Data Mapper, с другой стороны не возникнет ситауции, когда вызвали persist, но потом забыли вызвать flush

Страница 639 из 1418