Forms Symfony动态形式

Forms Symfony动态形式,forms,symfony1,dynamic,Forms,Symfony1,Dynamic,我从一个表单开始,它是手工制作的,因为它很复杂(它是一个javascript修改的表单,具有可排序的部分,等等)。问题是,现在我需要进行验证,而在使用sfValidator*类的操作中从头开始进行验证完全是一团糟 因此,我正在考虑使用sfForm来完成它,这样我的表单验证和错误处理就可以更容易地完成,这样我就可以在编辑和创建页面时重用这个表单 表格是这样的: <form> <input name="form[year]"/> <textarea name="

我从一个表单开始,它是手工制作的,因为它很复杂(它是一个javascript修改的表单,具有可排序的部分,等等)。问题是,现在我需要进行验证,而在使用sfValidator*类的操作中从头开始进行验证完全是一团糟

因此,我正在考虑使用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个元素。因此,它具有可重新排序的可变项目数量

我如何处理这个问题

欢迎提出任何想法,

谢谢。:)

我正在为重复字段使用嵌入式表单做类似的事情

在form类中,您可以执行以下操作:

$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));
}

除此之外,您还可以创建一个ItemForm类,并将小部件/验证模式定义放入其中,然后嵌入此表单的多个实例化。为以后的开发提供了更多的抽象。