2010-05-24 9 views
1

J'ai commencé avec un formulaire, qui est fait à la main en raison de sa complexité (c'est un formulaire modifié avec javascript, avec des parties triables, etc.). Le problème est que maintenant j'ai besoin de faire la validation, et c'est un désordre total de le faire à partir de zéro dans l'action en utilisant les classes sfValidator *. Donc, je pense à le faire en utilisant sfForm pour que ma validation de formulaire et la gestion des erreurs puissent être effectuées plus facilement et que je puisse réutiliser ce formulaire pour les pages Edit et Create.Formulaires dynamiques Symfony

La forme est quelque chose comme ceci:

<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> 

La chose est que la partie triables du formulaire peut être étendu de 2 à N éléments du côté client. Alors qu'il a quantité d'éléments variables qui peuvent être réordonnés.

Comment puis-je aborder ce problème?

Toutes les idées sont les bienvenues,
merci. :)

Répondre

2

Je fais quelque chose de similaire en utilisant des formes incorporées pour les champs répétitifs.

Dans votre classe de formulaire que vous pourriez faire quelque chose comme:

$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

Suite à cela, vous pouvez créer une classe de ItemForm et mettre vos définitions de schéma widget/validation en ce que puis incorporer plusieurs instanciations de ce formulaire. Vous donne un peu plus d'abstraction pour le développement ultérieur. – richsage

Questions connexes