我在單個頁面中有10個表單(它們在標籤頁中)。如何讓我的表單在Symfony中模塊化?
我的控制器功能非常龐大,爲了使表單模塊化,我打算只顯示控制器功能中的表單,並向相應的控制器進行POST。
這些10種形式中的一些用於其他頁面,因此通過更改動作url,可以更輕鬆地在單獨的控制器中管理它們。
但是,那麼如何顯示錶單錯誤和阻止表單重置,如果它是無效的?
如果嵌入式控制器可以重定向,我可以做到這一點。我錯過了另一種選擇嗎?
Symfony2必須有一個不允許嵌入式控制器重定向的原因,但我想知道爲什麼。
第三編輯:的實際形式
圖片:http://imgur.com/sIx3sgs,tnZkvqM,ZAP950s,hk45oTW#0
- 圖像1:步驟1(只能用一次創建)
- 圖2:步驟5(可創建多次)您可以看到創建表單和編輯表單
- 圖3:第5步用戶界面表單滑動。
- 圖片4:第六步一樣第一步
不需要這些表格,以便去,用戶可以創建並保存第六步而沒有需要創建第一步。
第二編輯:
這不是一個多步驟的形式。爲了方便,我將它們命名爲Step1
,Step2
等。
編輯:
這是我有:
class DefaultController extends Controller{
public function processAction(){
$request = $this->getRequest();
/*** FORM 1 ****/
$entity = new Step1();
$form1 = $this->createForm(new Step1Type(), $entity);
if ($request->getMethod() == 'POST'){
$form1->bindRequest($request);
if($form1->isValid()){
return $this->redirect($this->generateUrl('some_link'));
}
}
/***/
//Do the same for other forms
return array(
'form1' => $form1->createView()
//[...to form10]
);
}
}
這是我想擁有的一切:(我會用嵌入式控制器做到這一點,但你不能重定向)
class DefaultController extends Controller{
public function processAction(){
$request = $this->getRequest();
/*** FORM 1 ****/
$entity = new Step1();
$form1 = $this->createForm(new Step1Type(), $entity);
//change $form1 action url to point to Step1Controller->createAction()
/***/
//Do the same for other forms
return array(
'form1' => $form1->createView()
//[...to form10]
);
}
}
class Step1Controller extends Controller{
public function createAction(){
$request = $this->getRequest();
$entity = new Step1();
$form = $this->createForm(new Step1Type(), $entity);
$form->bindRequest($request);
if($form->isValid()){
//save entity
return $this->redirect($this->generateUrl($getRedirectLinkFromForm));
}
return $this->redirect($this->generateUrl('some_other_link'));
}
}
發佈您的代碼。 –
@AndrzejOśmiałowski我發佈了我的代碼。我編輯它使其更短。 – OsakaHQ
你的形式(整個形式)是一種「階梯式」形式嗎? –