如何使用symfony2中的多个实体字段创建唯一表单

时间:2012-09-25 10:18:38

标签: symfony doctrine

我想使用多个实体的某些字段创建表单。我已经创建了所有必需的entites,而且我没有使用表单类。我需要知道如何渲染表单并处理其数据,以便将它们保存到数据库中的正确表中。

这是我负责执行此操作的控制器的一部分

public function createPublicSpaceAction() {
    //My entities
    $Room = new Room();
    $GuestList = new GuestList();
    $Guest = new Guest();

    //I need to know what to do from here

    return $this -> render('AcmeUserBundle:Default:Forms/createPublicSpace.html.twig', array());
}

我一直在努力寻找解决方案,我想到了一种形式需要一个实体的想法。所以也许解决方案是将这些实体合并为一个,这样我就可以轻松地构建表单。然后我必须将数据持久化到相应的表。但我想不出如何合并实体。

2 个答案:

答案 0 :(得分:2)

我想出了一个临时解决方案。对于那些想要了解的人,我手动创建了一个看起来像我需要的所有实体的合并的实体。这个新实体与Doctrine没有链接,因此无法创建表。它的目标只是让我建立一个表单,并能够通过该表单操作数据。然后,我将提交的所有数据分配给相应的实体字段,并将它们保存到数据库中。

我再一次知道这不是最好的解决方案。但由于某些原因我不会说,现在这对我来说。我希望这可以帮助一些与我相同的情况,并且毫不犹豫地发布可能有帮助的链接或更好的方法。

答案 1 :(得分:1)

强烈建议使用表单类http://symfony.com/doc/current/book/forms.html#creating-form-classes

它们旨在节省时间并使许多事情变得更容易。

然而,要回答您的问题,请考虑以下事项。你的行动需要发布一个帖子请求。因此,使用帖子数据捕获请求对象:

use Symfony\Component\HttpFoundation\Request;

public function createPublicSpaceAction(Request $request)

然后获取表单构建器并创建表单:

$builder = $this->createFormBuilder();

$builder->add('floor', 'text', array(
        'label' => 'Room floor',
        'data' => $room->getFloor()
));

根据需要添加尽可能多的表单字段。有几种内置字段类型:http://symfony.com/doc/current/book/forms.html#built-in-field-types

创建表单:

$form = $builder->getForm();

将表单传递给您的模板:

return $this -> render('AcmeUserBundle:Default:Forms/
                        createPublicSpace.html.twig', array(
    'roomForm' = $form
));

要在您的操作中获取发布的数据:

if ('POST' == $request->getMethod()) {
    $data = $request->request->get("form");
}

在您的模板中,您可以自己渲染表单或让树枝完成工作:

{{ form_widget(form.floor)}}

所以这是最重要的事情。但是你应该通过http://symfony.com/doc/current/book/forms.html他们实际上告诉你我写下的所有内容。

祝你好运;)

相关问题