我想为具有许多属性的实体创建表单。为了确保数据输入的简便性,我想将该表单拆分为多个页面(例如2或3页)。 我们来看广告实体示例:
此分割需要在第一页中保存可用数据(在数据库中插入),然后再转到下一页。不幸的是,由于限制,这是不可能的。
问题是:是否有任何文件或任何例子可以解决这个问题?
如果没有可用的文档,您认为最好将我的实体拆分为n个实体,以便每页有一个实体吗?
谢谢你的帮助。
答案 0 :(得分:11)
答案 1 :(得分:10)
您不必拆分您的实体,而是分割您的表单:创建3个表单,每个表单都包含广告实体所需的属性。
你需要:
在伪代码中,您的控制器将如下所示:
public function newAdStep1() {
new Ad() // New instance of $ad
new formStep1($ad) // The first form containing only the ad text field
// The form was filled, manage it...
form->isValid()? {
persist($ad); // Persist the first part of your ad object
forward(newAdStep2, $ad) // Go on to step 2, your $ad object as an argument
}
// ... or display step1 to user
createView createAdStep1.html.twig('form' => $form);
}
public function newAdStep2($ad) {
new formStep2($ad); // Now the second form, containing the "contact" fields
isValid ? {
persist($ad)
forward(newAdStep3, $ad)
}
createView createAdStep2($form, $ad); // Your $ad object needs to be sent to the view
}
public function newAdStep3($ad) {
new formStep3($ad); // Third and last form, containing the (X,Y) fields
isValid ? {
$em->persist($ad);
$em->flush(); // Your instance of $ad can be stored in database now
return('success !');
}
return view createAdStep3($form, $ad);
}
答案 2 :(得分:0)
您可以将所有提交的数据存储在会话或临时表中,然后在最后将它们全部保存在一起。但是,我会尽量避免这样的额外工作。
我认为你的表单步骤可能遵循约束所规定的顺序。
有人说,有时我认为通过做出更好的设计或流程决策可以解决这类问题。即限制问题的数量或首先只询问重要的问题。在不知道这些细节的情况下,很难知道是否可以做到这一点。