2010-05-24 74 views
1

我從一個表單開始,由於它的複雜性(它是一個javascript修改後的表單,帶有可排序的部分等)而手工製作而成。問題是,現在我需要進行驗證,並且在使用sfValidator *類的操作中從零開始做這件事是一團糟。Symfony動態表格

所以,我想使用sfForm來做到這一點,這樣我的表單驗證和錯誤處理可以更容易完成,所以我可以重用這個表單來編輯和創建頁面。

形式是這樣的:

<form> 
    <input name="form[year]"/> 
    <textarea name="form[description]"></textarea> 
    <div class="sortable"> 
    <div class="item"> 
     <input name="form[items][0][name]"/> 
     <input name="form[items][0][age]"/> 
    </div> 
    <div class="item"> 
     <input name="form[items][1][name]"/> 
     <input name="form[items][1][age]"/> 
    </div> 
    </div> 
</form> 

的事情是,表格的排序部分可以從2被擴展到在客戶端上的N個元素。以便它具有可以重新排序的可變項目數量。

我該如何解決這個問題?

歡迎任何想法,
謝謝。 :)

回答

2

我正在做一些類似的使用嵌入式的重複字段。

在你的表單類,你可以這樣做:

$form_data = $this->getObject(); 

if (isset($form_data['items']) && is_array($form_data['items'])) 
{ 
    $items_form = new BaseForm(); 

    foreach ($form_data['items'] as $count => $values) 
    { 
    $form = new BaseForm(); 
    $form->widgetSchema['name'] = new sfWidgetFormInputText(); 
    $form->widgetSchema['age'] = new sfWidgetFormInputText(); 

    $items_form->embedForm($count, $form); 
    } 

    $this->embedForm('items', $items_form); 
    $this->validatorSchema['items'] = new sfValidatorPass(array('required' => false)); 
} 
+0

繼此,您可以創建一個ItemForm類,並把你的widget /驗證架構定義,這一點,那麼嵌入這種形式的多個實例。爲以後的開發提供了更多的抽象。 – richsage 2010-05-25 08:32:32