Ich habe ein Unterformular ($ fileUploadSubform) in einem Unterformular ($ requestSubform). Ich habe setElementsBelongTo ("requestRow [$ rowNumber]") für das übergeordnete Teilformular ($ requestSubform) aufgerufen.Zend setElementsBelongTo() -Effekt auf Unterformular-Elemente
$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
Wenn das Formular gerendert wird, $ fileUploadSubform filedesc Element‘name und id sind als
name="requestRow[1][requestRow][1][fileUpload][fileDesc]"
id="requestRow-1-fileUpload-fileDesc"
folgt Warum wird der Wert I in der setElementsBelongTo eingestellt haben() Funktion zweimal wiederholt wird?
Vielen Dank im Voraus!
[Update 2015.08.13]
als eine vorübergehende Lösung, ich habe gerade setElementsBelongTo() von dem Kind Unterformular ($ fileUploadSubform) anstelle des Mutterformulars ($ requestSubform) genannt
[Update 2015.08.17]
ich habe den folgenden Code habe ich versucht, aus http://zend-framework-community.634137.n4.nabble.com/Improved-array-support-for-Zend-Form-td667215.html bekam, wie es in diesem Post sagt, dass elementsTobelong Unterformular richtig funktioniert.
$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());
Aber hier ist, was ich für die Elemente $ subForms und $ subFubForm bekomme.
<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]">
[Update 2015.08.24]
ich endlich herausgefunden, das Problem.
Es war diese Linie
$this->view->field = $additionalInfoSubform->__toString();
Es zeigt einige Elemente nicht waren, bevor das ist, warum ich diese Zeile hinzugefügt. Und nur jetzt verstehe ich, dass jene Elemente, die nicht angezeigt wurden, ohne ViewHelper Decorator Set sind. Also, wenn ich den ViewHelper als Dekorator eingestellt habe und die obigen Felder entfernt habe und setElementsBelongTo() des Unterformulars aufgerufen habe, ohne vom Wurzelverzeichnis der Hierarchie nur von diesem Unterformular zu haben, dann hat es funktioniert.
Also, was ist die Frage? Hast du gelöst oder nicht? Was ist seine Wunschausgabe? – Stanimir
Anstelle von "requestRow [1] [requestRow] [1] [fileUpload] [fileDesc]" als Name des Elements sollte es "requestRow [1] [fileUpload] [fileDesc]" sein. – artsylar
Ich kann das nicht reproduzieren. Was ist die genaue Version von ZF, die Sie verwenden? Wenn es später als 1.12.9 ist, können Sie den vollständigen Code einschließlich des Hauptformulars (Eltern) bereitstellen? – darkangel