我想使用多个实体的某些字段创建表单。我已经创建了所有必需的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());
}
我一直在努力寻找解决方案,我想到了一种形式需要一个实体的想法。所以也许解决方案是将这些实体合并为一个,这样我就可以轻松地构建表单。然后我必须将数据持久化到相应的表。但我想不出如何合并实体。
答案 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他们实际上告诉你我写下的所有内容。
祝你好运;)