Для начала опишу вводные:
В системе имеется сущность тикета. Это одна из центральных сущностей бизнес-логики, соответственно имеет достаточно много полей и аггрегирует в себе несколько более маленьких сущностей. Тикеты приходят из разных источников по API, и от многих факторов зависит какие именно поля придут в тикете. Когда тикет приходит, определяется к какому бизнес-кейсу он относится и заполняется модель соответствующая кейсу. Например, если приходит тикет с типом 'refuse' я создаю TicketRefuseForm со своими правилами валидациями и загружаю её и далее работаю с ней. Сооветственно на каждый бизнес кейс у меня отдельная форма.
Но, помимо этого существует еще и веб интерфейс на котором обрабатываются тикеты. Там уже огромная форма которая содержит в себе все поля относящиеся к тикету. На самой форме имеется возможность изменить бизнес-кейс тикета(реализовано в виде дропдауна). Суть задачи сосоит в том, что при изменении тикета должны менятся правила валидации формы.
Не могу понять как это лучше реализовать. Сразу оговорюсь, что вариант со сценариями валидации отпадает, т.к. их будет очень много, в будущем количество будет увеличиваться, и это сделает код громоздким нечитаемым и неподдреживаемым. В идеале, конечно бы хотелось переиспользовать уже созданные объекты форм,но как это сделать?
Как лучше реализовать огромную форму с кучей разных правил валидации?
Re: Как лучше реализовать огромную форму с кучей разных правил валидации?
Вместо дропдауна сделайте отдельные ссылки на экшены с теми формами.
Re: Как лучше реализовать огромную форму с кучей разных правил валидации?
Да, это достаточно просто и такой вариант плавает на поверхности.
Можно, мне кажется, даже оставить дропдаун, просто слать по onCahnge запрос, и pjax-ом рендерить форму с нужными полями.
Но идея в том, что форма всегда должна быть целиком доступна для обозрения.
То есть я могу видеть все поля сущности на форме целиком, но допустим при выборе определенного кейса, применяются нужные правила валидации, и например допступными для редактирования становтся только те поля, что есть в кейсе(остальные при этом остаются видимыми, но readonly). Как вы думаете, можно ли вообще добиться такого поведения без жертвоприношений и танцев с бубнами в Yii?
Последний раз редактировалось voodooism 2019.07.16, 10:40, всего редактировалось 1 раз.
Re: Как лучше реализовать огромную форму с кучей разных правил валидации?
Завернуть форму в пиджак. При выборе значения в дропдауне обновлять пиджак с отдельных экшенов отрисовывать одну и ту же форму.