Symfony2表单 - 如何使用隐藏字段引用父对象

时间:2011-11-18 17:17:30

标签: php forms symfony doctrine-orm

我是Symfony表单的新手,我正在试图找出一个带有引用父对象的隐藏字段的表单。例如,我有一个与联系人有多对一关系的列表。创建新联系人时,需要一个隐藏字段,其中包含要添加联系人的列表的ID。

目前,我正在尝试在ListIdType表格中嵌入名为ContactType的表单。 ListIdType形式中唯一的字段是列表的id。这很好用,因为我可以在空的联系人实体上设置列表,它会自动填充名为contact[list][id]的表单中的元素(在ListIdType表单中定义)。这个问题是,当我提交表单时,我得到一个错误,说列表类中不存在元素“id”或methed“setId()”。

我的感觉是我做错了什么,但我找不到任何文件指出我正确的方向。

2 个答案:

答案 0 :(得分:6)

我提出的解决方案是添加隐藏字段,property_path选项设置为FALSE。以下是ContactType::buildForm中的代码:

  $builder->add('list_id', 'hidden', array(
        'data' => $data->getList()->getId(),
        'property_path' => FALSE,
    ));

然后我在控制器中处理该字段。

这有效,但对我来说不是最好的解决方案。如果有人能提出更好的方法,我仍然是开放的!

答案 1 :(得分:3)

最近我发现了Gregwar的论坛包,它增加了entity_id表单类型。它会自动完成大部分所需的转换,可能正是您所需要的。

https://github.com/Gregwar/FormBundle