Я сделал то, чего вы пытаетесь достичь в некоторых проектах, и лучший подход, который я нашел, - использовать подформы. Вот некоторые рекомендации, которые могут вам помочь.
Config родительская форма
public function __construct($wine = null)
{
parent::__construct();
$this->setName('parent-form'); // you can set any name
$this->setIsArray(true);
$this->_initForm();
}
Добавить столько подчиненной вам нужно внутри формы
protected function _initForm(){
$this->clearSubForms();
$subForm = new Application_Form_Subform(1);
$subForm->removeDecorator('Form');
$this->addSubform($subForm,'subform-'.1);
$subForm = new Application_Form_Subform(2);
$subForm->removeDecorator('Form');
$this->addSubform($subForm,'subform-'.2);
}
Config подчиненной
public function __construct($key) {
parent::__construct();
$this->setElementsBelongTo("parentform[subform][$key]");
$this->setIsArray(true)->setName("subform")->setAttrib('enctype', 'multipart/form-data');
$this->_initForm();
}
Echo подформ на ваш взгляд, форма
<?php
foreach($this->element->getSubforms() as $key => $subForm){
echo $subForm;
}
?>
Динамически добавлять элементы в вашем представлении формы с помощью Jquery
Я не собираюсь представить любой код здесь. Но я обычно делаю это, чтобы добавить скрытый шаблон для подформы, чтобы я мог клонировать его. Вам также нужно настроить индексы имени attit на входах подформы.
Получение данных на контроллере
if ($request->isPost()) {
$data = $request->getPost('parentform');
if ($form->isValid($data)) {
foreach ($data['subform'] as $subformInfo) { // loop through each subform input
// do something with your data
}
}