У меня есть подформа ($ fileUploadSubform) внутри подформы ($ requestSubform). Я вызвал setElementsBelongTo ( "requestRow [$ rowNumber]" ) в родительской подчиненной форме ($ requestSubform).
$requestSubform= new Zend_Form_Subform();
$requestSubform->setElementsBelongTo("requestRow[$rowNumber]");
// add elements to $requestSubform
// now create the file upload subform
$fileUploadSubform= new Zend_Form_SubForm();
$fileUploadSubform->addElement('file', 'fileName')
->setLabel('File');
$fileUploadSubform->addElement('text', 'fileDesc')
->setLabel('File Description');
$requestSubform->addSubForm($fileUploadSubform, 'fileUpload');
$this->view->field = $requestSubform->__toString();
// pass it as json via ajax back to javascript
Когда форма отображается, $fileUploadSubform fileDesc имеет имя и идентификатор элемента
name="requestRow[1][requestRow][1][fileUpload][fileDesc]"
id="requestRow-1-fileUpload-fileDesc"
Почему значение, которое я установил в функции setElementsBelongTo(), повторяется дважды?
Заранее благодарю вас!
[Обновление 08/13/2015]
Как временное обходное решение, я просто вызвал setElementsBelongTo() из дочерней подформы ($ fileUploadSubform) вместо родительской подформы ($ requestSubform)
[Обновление 08/17/2015]
Я пробовал следующий код, который я получил из http://zend-framework-community.634137.n4.nabble.com/Improved-array-support-for-Zend-Form-td667215.html, так как в этом сообщении говорится, что элементы подчиненной формыTobelong to работают правильно.
$form = new Zend_Form();
$form->setElementsBelongTo('foobar');
$form->addElement('text', 'firstName')
->getElement('firstName')
->setLabel('First Name')
->setRequired(true);
$form->addElement('text', 'lastName')
->getElement('lastName')
->setLabel('Last Name')
->setRequired(true);
$subForm = new Zend_Form_SubForm();
$subForm->setElementsBelongTo('foobar[baz]');
$subForm->addElement('text', 'email')
->getElement('email')
->setLabel('Email Address');
$subSubForm = new Zend_Form_SubForm();
$subSubForm->setElementsBelongTo('foobar[baz][bat]');
$subSubForm->addElement('checkbox', 'home')
->getElement('home')
->setLabel('Home address?');
$subForm->addSubForm($subSubForm, 'subSub');
$form->addSubForm($subForm, 'sub')
->addElement('submit', 'save', array('value' => 'submit'));
print_r($form->__toString());
Но вот что я получаю для элементов $subForm и $subFubForm.
<input id="foobar-foobar-baz-email" type="text" value="" name="foobar[foobar][foobar][baz][email]">
<input id="foobar-foobar-baz-foobar-baz-bat-home" type="checkbox" value="1" name="foobar[foobar][foobar][baz][foobar][foobar][baz][foobar][baz][bat][home]">
[Обновление 08/24/2015]
Я, наконец, понял проблему.
Это была строка
$this->view->field = $additionalInfoSubform->__toString();
Были некоторые элементы, которые не показывались до этого, поэтому я добавил эту строку. И только теперь я понимаю, что те элементы, которые не появлялись, это те, у которых нет декоратор-декодера ViewHelper. Поэтому, когда я устанавливаю ViewHelper в качестве декоратора и удаляю вышеуказанные поля и называю setElementsBelongTo() подформы без необходимости из корня иерархии только из этой подформы, тогда он работал.