2017-02-22 18 views
0

Я пытаюсь создать форму с полем CollectionType, содержащим поле электронной почты (которое является одним из двух полей объекта), которое я хочу добавить и удалить по своему желанию.EntityType как поле ввода?

Вот сценарий:

У меня есть три сущности: User, Cluster и отношения между обоими называется ClusterAdministrator.

Объект User имеет множество атрибутов all-around (идентификатор, имя, адрес электронной почты и т. Д.). У объекта Cluster тоже много атрибутов, и один из них - administrators, который является ArrayCollection. Объект ClusterAdministrator имеет 3 атрибута: id, пользователь и кластер.

У моего BD около 50K пользователей. Если я добавлю поле CollectionType для UserType, и мой UserType будет формой с user как обычным EntityType, приложение потерпит крах, потому что для отображения такого огромного поля выбора потребуется более 30 секунд. Если я мой UserType форма с user как EmailType, форма хорошо визуализации (см here), но когда я нажимаю сохранить, я получаю ошибку:

Expected argument of type "App\AppBundle\Entity\User", "string" given

Как мне сделать эту работу просто показывая поле электронной почты?

Извините, ребята, я очень новичок в Symfony. Я по достоинству оценю вашу драгоценную помощь.

ответ

1

Вы должны использовать Data Transformer в Symfony. Все, что делает трансформатор, преобразует строку (имя пользователя или адрес электронной почты) в соответствующий объект User. Что должно решить вашу проблему.

Для удобства пользователей вы можете преобразовать текстовое поле в autocomplete с помощью jQuery. Я долго его использовал. Я использовал PUGXAutoCompleteBundle для создания поля автозаполнения и создал пользовательский Transformer, чтобы передать объект родительскому объекту.

Я могу поделиться некоторыми фрагментами кода позже завтра, если потребуется.

Надеюсь, это поможет!

+0

Большое спасибо Jeet. Думаю, это правильный подход. Я пробовал трансформаторы в последние несколько дней, и я думаю, что я собираюсь туда. большое спасибо – andregoncalves