Forms 手动选择相关实体
我有一个可以有图像的实体。这是使用Forms 手动选择相关实体,forms,symfony,doctrine,Forms,Symfony,Doctrine,我有一个可以有图像的实体。这是使用OneToMany关系完成的。现在,我希望用户选择一个图像。我当然可以这样使用表单字段: $builder->add('image','entity',array( “标签”=>“图像”, 'class'=>'VendorNameBundle:Image', “属性”=>“id”, ) ); 它按预期呈现一个包含所有ID的下拉列表。但我真正想要的只是一个隐藏的字段,它存储所选图像的id 这会起作用,但似乎不是一件好事 在中键入: $builder->添加(“图
OneToMany
关系完成的。现在,我希望用户选择一个图像。我当然可以这样使用表单字段
:
$builder->add('image','entity',array(
“标签”=>“图像”,
'class'=>'VendorNameBundle:Image',
“属性”=>“id”,
) );
它按预期呈现一个包含所有ID的下拉列表。但我真正想要的只是一个隐藏的字段,它存储所选图像的id
这会起作用,但似乎不是一件好事
在中键入:
$builder->添加(“图像”、“文本”和数组)(
'data'=>$object->getImage()->getId(),
“属性路径”=>false
));
在控制器中:
$\u image=$form[“\u image”]->getData();
如果($\u图像){
$image=$this->getDoctrine()->getRepository('VendorNameBundle:image')->find($\u image);
如果($image){
$object->setImage($image);
}
}
我的问题是:如何获取包含相关对象ID的隐藏文本字段并存储新选定的字段?是否有javascript可以根据选定的图像更新字段?或者您是否会回发两个字段,例如
new\u image
和old\u image
。在这种情况下,为什么不在持久化实体之前使用新字段覆盖数据呢?我实际上想更新字段并替换当前值。但是如果我发送另一个值,比如new\u image
,我仍然需要像问题中的那样手动更新实体,对吗?正确,我认为这没有任何意义,除非你隐藏select符号,否则我会自动为图像实体创建一个select符号,并使用一些javascript来操作它,使其成为用户选择的任何图像的值。但我不喜欢这样的事实,它加载了选择框的所有图像(可能会得到一个很长的列表),我必须使用CSS隐藏它,然后在那里更改值。似乎比我目前的解决方案更努力。谢谢你的意见。