2

我想使用来自多个实体的一些字段创建一个表单。我已经创建了所有需要的不同实体,并且我没有使用表单类。我需要知道如何呈现表单并处理其数据,以便将它们保存到数据库中的正确表中。

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

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());
}

我一直在努力寻找解决方案,我想出了一个表格需要一个实体的想法。因此,也许解决方案是将这些实体合并为一个,以便我可以轻松构建表单。然后我必须将数据保存到相应的表中。但我想不出如何合并实体。

4

2 回答 2

2

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

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

于 2012-09-26T10:02:49.043 回答
1

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

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

但是,要回答您的问题,请考虑以下事项。您的操作需要处理发布请求。因此,使用 post 数据捕获请求对象:

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");
}

在您的模板中,您可以自己呈现表单或让 twig 完成工作:

{{ form_widget(form.floor)}}

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

祝你好运 ;)

于 2012-09-25T13:38:34.077 回答