我尝试使用包含电子邮件字段(实体的两个字段之一)的CollectionType字段创建一个表单,我希望根据需要添加和删除。
以下是该方案:
我有三个实体:public Node<T> insert(Node<T> root, T data)
{
if(root==null) // Problem Use this.root
{
root= new Node<T>(data); // Same here use this.root = new ....
return root;
}
...
,User
以及两者之间的关系{。}}。
实体Cluster
有很多全方位的属性(ID,名称,电子邮件等)。实体ClusterAdministrator
也有很多属性,其中一个是User
,它是一个ArrayCollection。实体Cluster
有3个属性:id,user和cluster。
我的BD拥有大约50,000名用户。如果我添加UserType的CollectionType字段,并且我的UserType是一个administrators
作为正常EntityType的表单,app会崩溃,因为渲染这么大的选择框需要30多秒。如果我的UserType是一个带有ClusterAdministrator
作为EmailType的表单,那么表单会很好地呈现(请参阅here),但是当我单击“保存”时,我会收到错误:
类型&#34; App \ AppBundle \ Entity \ User&#34;,&#34; string&#34;的预期参数;给定
如何通过显示电子邮件字段来完成此工作?
对不起伙计们,我是Symfony的新手。我非常感谢您的宝贵帮助。
答案 0 :(得分:2)
您应该使用Symfony
中提供的Data Transformer。变压器所做的就是将字符串(用户名或电子邮件)转换为相关的User对象。哪个可以解决你的问题。
为了获得更好的用户体验,您可以在jQuery的帮助下将文本框转换为autocomplete
。我早就用了它。我使用PUGXAutoCompleteBundle生成了自动填充字段,并创建了一个自定义Transformer
来将对象提供给父实体。
如果需要,我可以在明天之后分享一些代码段。
希望这有帮助!