添加多个相同类型的子表单

Posted

技术标签:

【中文标题】添加多个相同类型的子表单【英文标题】:Add multiple subforms of the same type 【发布时间】:2011-04-21 06:19:16 【问题描述】:

我最近在处理表单和子表单。

我创建了以下内容:

$form = new Application_Form_Cv();
$experience = new Zend_Form_SubForm();
$form->addSubForm($experience, 'experience');

我的数组中确实有一个元素'experience',这要感谢

$form->addSubForm($experience, 'experience');.

当我尝试以下操作时:

$experience->addSubForm(new Application_Form_Experience(), '0');
$experience->addSubForm(new Application_Form_Experience(), '1');

对象覆盖自身,我只得到一个“体验”元素,0 和 1 不存在。

array (
  'controller' => 'cv',
  'action' => 'index',
  'module' => 'default',
  'CvName' => 'Cv Ingenieur informatique',
  'LanguageCode' => 'fr',
  'UserID' => '2',
  'experience' => 
  array (
    'CompanyName' => 'Mondial Assistance Ltd',
    'From' => '2002',
    'Until' => '2009',
    'Current' => '1',
  ),
  'submit' => 'Save CV',
)  

只有Zend_Form_Subforms 在数组中创建新键?

【问题讨论】:

【参考方案1】:
    您的子表单必须扩展 Zend_Form_SubForm 或模仿它的行为(设置 isArray 并删除“form”-decorator) 您不能两次添加相同的对象,因此您必须克隆它

以下截图应该可以按预期工作

$form = new Application_Form_Cv();
$experience = new Zend_Form_SubForm();
$form->addSubForm($experience, 'experience');

$exForm = new Application_Form_Experience();
$exForm->setIsArray(true);
$exForm->removeDecorator('form');

$experience->addSubForm($exForm, '0');
$experience->addSubForm(clone $exForm, '1');
$experience->addSubForm(clone $exForm, '2');

【讨论】:

以上是关于添加多个相同类型的子表单的主要内容,如果未能解决你的问题,请参考以下文章

当多个输入具有相同名称时,根据输入类型设置 jquery 表单验证

使用 jQuery 查找 HTML 表单元素的子类型

如何提交多个具有相同name属性的表单

Symfony 表单 - 在 CollectionType 中的子条目类型中访问实体

如何在django中为问题添加多个表单字段类型的选项?

如何将 vue 单个组件模板部分拆分为更小的子模板