
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
или амар абдул ибан хатабыч
повторюсь - хочешь унификации правил - тебе никто не мешает компилить из правил валидации 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

Sergey
13.02.2018
16:47:11

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
как бы задача выполнимая, но в реальности это на порядок сложнее чем заморачиваться с обратной совместимостью)

Вадим
13.02.2018
17:08:30

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

Sergey
13.02.2018
17:08:58
и это ад и сложно

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

Вадим
13.02.2018
17:10:38

Petr
13.02.2018
17:10:55
Зависимость есть, фронтендщик жив

Вадим
13.02.2018
17:12:27

Petr
13.02.2018
17:15:29

Sergey
13.02.2018
17:16:03

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

Вадим
13.02.2018
17:20:00

Google

Sergey
13.02.2018
17:21:05

Вадим
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

Sergey
13.02.2018
17:22:23

Вадим
13.02.2018
17:22:35

Petr
13.02.2018
17:22:49

Admin
ERROR: S client not available

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

Вадим
13.02.2018
17:23:49

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

Вадим
13.02.2018
17:24:04

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 игнорировался.

Sergey
13.02.2018
18:48:03

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