2011-09-28 17 views
6

Ho il problema, che il seguente modulo Zend genera un errore. Il problema è il "file" -elementi e l'utilizzo di setElementDecorators.Zend File Upload e Element Decorators

class Products_AddForm extends Zend_Form 
{ 
    function init() { 

     // other form elements... 

     $uploadElement = new Zend_Form_Element_File('Excel'); 
     $uploadElement->setLabel('Excel'); 
     $this->addElement($uploadElement); 

     $this->setElementDecorators(array(
      'ViewHelper', 
      'Errors', 
      array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
      array('Label', array('tag' => 'th')), 
      array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
     )); 



    } 
} 

Questo genera un errore.

(Warning: Exception caught by form: No file decorator found... unable to render file element Stack Trace: #0) 

Aggiunta $uploadElement->addDecorator('File'); alla fine dopo il SetElementDecorators funzionerà, ma questo mi darà l'elemento file due volte!

Qualcuno può aiutare, per favore?

TIA Matt

risposta

10

L'elemento file richiede un proprio decoratore - Zend_Form_Decorator_File.

$this->setElementDecorators(array(
     'File', 
     'Errors', 
     array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
     array('Label', array('tag' => 'th')), 
     array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
)); 

[modifica]

Siamo appena notato che si utilizza anche altri elementi del modulo.

Dopo il codice originale, aggiungere:

$this->getElement('Excel')->setDecorators(
    array(
     'File', 
     'Errors', 
     array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
     array('Label', array('tag' => 'th')), 
     array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
    ) 
); 

In questo modo, ViewHelper si aggiunge a tutti gli altri elementi, e per il vostro elemento di File File viene usato al posto.

+0

Grazie 4 di aiuto. Aggiunta di questa opzione: Avviso: Eccezione rilevata dal modulo: metodo getMaxFileSize non esiste Traccia stack: # 0 – frgtv10

+0

Aggiornamento della mia risposta :) –

+0

che funziona. non l'hai notato nei documenti di zend !? :/ GRAZIE! – frgtv10