我一直在使用Symfony2进行新项目,并遇到了一个相当愚蠢的问题。
我的两个学说实体Item和Comment之间有一个OneToMany关系。我现在有一个表单供用户为给定的项目创建新的评论。在创建新评论时,此评论当然有一个属性Item,这应该设置为当前正在评论的项目。
当点击项目上的评论链接时,id作为参数发送到表单页面,我的计划是让这个id填充一个隐藏字段,然后使用Data Transformer将其转换为回发项目。
但是我该如何实现这项工作呢?如何将此ID转换为表单中的隐藏字段,以便Data Transformer可以正确处理它?或者在Symfony2中使用表单时是否有更好/更正确的处理此类关系的方法?
答案 0 :(得分:3)
您不需要隐藏字段。您的操作必须知道用户正在评论哪个项目,因此您可以在评论中设置项目:
/**
* @Route("/item/{id}/comment")
*/
public function commentAction(Item $item)
{
$comment = new Comment;
$comment->setItem($item);
$form = $this->createForm('item_comment', $comment);
// ...
}
答案 1 :(得分:1)
无需数据转换器。只需为“Item”属性创建一个表单字段并将其设置为隐藏。像
这样的东西 $item = $this->getDoctrine()
->getRepository('AcmeDemoBundle:Item')
->find($id);
$comment = new Comment();
$comment->setItem($item);
$form = $this->createFormBuilder($comment)
... //add some fields
->add('item', array('hidden'=>true));
->getForm();
当您收到表单并将其绑定时,将正确设置Comment对象的'item'属性