Использование полей, добавленных событиями формы для элементов коллекции в symfony - PullRequest
0 голосов
/ 08 мая 2020

Сценарий : мне нужно создать предложение для клиентов. Каждое предложение содержит список товаров, относящихся к товарам в базе данных. Эти продукты могут иметь разные варианты / опции, которые влияют на ценообразование (которое рассчитывается динамически при изменении - здесь нет проблем). В моей форме есть автозаполнение для названий продуктов, которое добавляет элементы, назначенные выбранному продукту, в коллекцию.

Проблема : При работе с коллекциями способ обработки добавления элементов в symfonys - это прототипы . К сожалению, этот процесс полностью обрабатывается на стороне клиента, и поэтому не указан контекст, который мог бы вызвать событие формы для добавления полей, зависящих от продукта.

У меня есть несколько решений, которые могут решить эту проблему, но мне интересно есть ли какая-то передовая практика для этой проблемы?

Решение 1. Форма автоматической отправки после выбора продукта

Это самое простое решение, поскольку после создания нового элемента с продуктом на стороне сервера у меня нет проблем с работой с событиями формы, и я могу добавлять поля по мере необходимости. Однако форма будет перезагружаться каждый раз, что не очень хорошо с точки зрения UX.

Решение 2. Не используйте прототип и не создавайте форму для непостоянного фиктивного объекта на стороне сервера.

Это было бы немного сложнее. При добавлении продукта сценарий на стороне сервера создаст элемент с назначенным продуктом и создаст для него форму. Я думаю, что с этим есть несколько проблем, например, относительно идентификаторов форм / имен полей. В настоящее время это мое предпочтительное решение.

Решение 3. Возможна визуализация всех полей и их динамическое скрытие, если они не нужны (невозможно)

Это невозможно, так как поля слишком динамичный c для этого. Существует даже связь «один ко многим» между элементами и дополнительными параметрами, которые необходимо отобразить. Поэтому знание контекста продукта является обязательным.

Ресурсы:

Проблема с github 8-летней давности для этого topi c

...