2015-08-12 16 views
10

Alt formda ($ requestSubform) bir alt formum ($ fileUploadSubform) var. Ana alt formda ($ requestSubform) setElementsBelongTo ("requestRow [$ rowNumber]") çağırdım. Ben setElementsBelongTo değeri kurdum NedenAlt öğe öğelerinde Zend setElementsBelongTo() etkisi

name="requestRow[1][requestRow][1][fileUpload][fileDesc]" 
id="requestRow-1-fileUpload-fileDesc" 

() fonksiyonu iki kez tekrarlanır şöyle formu oluşturulur

$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 elemanı' adı ve kimliği vardır?

Teşekkürler!

[Güncelleme 2015/08/13]

, sadece yerine ana alt formun ($ requestSubform) çocuk alt form ($ fileUploadSubform) dan setElementsBelongTo() adı verilen geçici bir çözüm olarak

o elementsTobelong düzgün çalıştığını etmek alt form söz konusu yayında söylediği gibi [Güncelleme 2015/08/17]

ben http://zend-framework-community.634137.n4.nabble.com/Improved-array-support-for-Zend-Form-td667215.html aldığım aşağıdaki kodu çalıştılar.

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

Ancak, burada $ subForm ve $ subFubForm öğelerinin öğeleri için alıyorum.

<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]"> 

[Güncelleme 2015/08/24]

Sonunda sorunu çözdüm.

O bu çizgiyi ekledi yüzden önce gösterilmiyor bazı unsurlar vardı bu hat

$this->view->field = $additionalInfoSubform->__toString(); 

oldu. Ve şimdi anladım ki, görünmeyen öğeler, ViewHelper dekoratör seti olmayanlar. Böylece, ViewHelper'ı dekoratör olarak ayarladığımda ve yukarıdaki alanları kaldırarak ve alt formun hiyerarşinin kökünden yalnızca alt formdan olmak zorunda kalmadan setElementsBelongTo() öğesini çağırdığımda çalıştı.

+0

Yani, soru nedir? Çözdün mü, hayır mı? Ne arzusu var? Bunun yerine "requestRow [1] [requestRow] [1] [FILEUPLOAD] [fileDesc]" öğesinin adı olarak, olması gereken bir – Stanimir

+0

"requestRow [1] [FILEUPLOAD] [fileDesc]". – artsylar

+1

Bunu yeniden oluşturamıyorum. Kullandığınız ZF'nin tam sürümü nedir? Eğer 1.12.9'dan daha geç ise, ana (ana) form da dahil olmak üzere tam kodu sağlayabilir misiniz? – darkangel

cevap

4

ile aşina değilim, ancak görünümden, form hiyerarşisi örtülüdür. Demek istediğim, setElementsBelongTo()'u kullanırken tam "yolu" bildirmek zorunda değilsiniz. Bunu bir klasör yapısı gibi düşünün, sadece mevcut çalışma dizinindeki alt klasörü adlandırın.Yani

Gümrüğe zaman:

name="foo[bar][email]" 

belgelerine diyor:

setElementsBelongTo

$form = new Zend_Form(); 
$form->setElementsBelongTo('foo'); 

$subForm = new Zend_Form_SubForm(); 
$subForm->setElementsBelongTo('bar'); 
$subForm->addElement('text', 'email') 

$form->addSubForm($subForm, 'sub'); 

Bu aka foo içine bar içine email ve bar koyarak olarak yorumlanır (hat 1367) dizi öğelerinin
Ad ayarlama
erişime aittir: Kamu
Zend_Form setElementsBelongTo (string $ dizi)
dize $ dizi

Ayrıca http://framework.zend.com/apidoc/1.9/Zend_Form/Zend_Form.html#setElementsBelongTo

Gönderen:

Zend_Form :: setElementsBelongTo ($ dizisi)
Bu yöntemi kullanarak, formun tüm öğelerinin ait olduğu dizinin adını belirtebilirsiniz. GetElementsBelongTo() erişimcisini kullanarak ismi belirleyebilirsiniz. http://framework.zend.com/manual/1.12/en/zend.form.advanced.html

üslup itibaren

biraz belirsiz olabilir ama teorimi destekleyebilir. $form->setElementsBelongTo('foo') kullanırken Yani, şey metotunun foo unsuru haline gelecektir $form eklendi ve bu nedenle foo alt elemanları ile anlaşma müteakip setElementsBelongTo() aramaların dışında bırakılmalıdır.

+0

Teşekkür ederiz @spenibus! Cevabın ile haklısın.Aslında, elemanların isimlendirilmesinde de bu yolu denedim ama bu $ this-> view-> alan = $ subform -> __ toString(); Bunu daha önce ekledim çünkü o satır olmadan görünmeyen bazı öğeler var. Ve şimdi sadece bu elemanların ViewHelper dekoratörlerinin ayarlanmadığını fark ettim. Bu satırı eklediğimde, öğeler gösteriliyor ama isimleriyle ilgili sorun yaşıyor. – artsylar