如何使Symfony2实体formtype显示类型A的实体,但将它们保存为类型B?

时间:2013-01-03 14:53:45

标签: forms symfony

我目前在我的应用程序中有一个选项供用户从列表中选择喜欢的项目。表单元素的类型为Entity,并显示对象列表。用户可以选择其中一些作为他们个人的最爱。

但是,虽然列表必须显示Items,但必须存储的内容实际上是FavoritedItem(其中包含有关用户何时/如何收藏其项目的额外信息)。

我无法弄清楚如何转换实体类型,以便用户可以从Item实体列表中选择,但表单存储了连接到用户的FavoritedItems。

1 个答案:

答案 0 :(得分:1)

我猜你的实体与FavoritedItem有关系,在创建表单时,不要包含该字段,而是包含用户选择的数据的虚拟字段:

$builder->add('favs', null, array('property_path' => false, 'type'='entity'.....));

找到这一行:

    if ($form->isValid()) {
        // perform some action, such as saving the task to the database

        return $this->redirect($this->generateUrl('task_success'));
    }

并为您的每件商品在您的实体上设置相应的FavoritedItem。它看起来像是:

$favorites = $form->get('favs')->getData();

foreach($favorites as $f){
    $FavItem = new FavoritedItem($f);
    $yourEntity->addFavorite($FavItem);
}