2010-05-24 4 views
1

복잡성 (자바 스크립트 수정 폼, 정렬 가능한 부품 등) 때문에 손으로 만든 폼으로 시작했습니다. 문제는 이제 유효성 검사를 수행해야하며 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> 

것은 폼의 정렬 부분은 클라이언트 측에서 N의 요소 (2)로부터 확장 될 수있다 :

형태는 다음과 같이된다. 그래서 그것은 재 배열 될 수있는 가변적 인 항목 수량을 갖습니다.

어떻게이 문제에 접근 할 수 있습니까?

어떤 아이디어라도 환영합니다.
감사합니다. :)

답변

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 클래스를 생성하고 있다는 점에서 위젯/검증 스키마 정의를 넣어,이 형태의 여러 인스턴스 생성을 포함 할 수있다. 나중에 개발할 때 좀 더 추상적 인 추상화를 제공합니다. – richsage