Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zend File Upload and Element Decorators

I have the problem, that the following Zend Form throws an error. The problem is the "file"-element and using setElementDecorators.

    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'))
        ));



    }
}

This throws an error.

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

Adding $uploadElement->addDecorator('File'); at the end after the SetElementDecorators will work, but this will give me the file element twice!

Can anybody help, please?

TIA Matt

like image 678
frgtv10 Avatar asked Sep 28 '11 09:09

frgtv10


1 Answers

The File element requires it's own decorator - 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'))
));

[edit]

Have just noticed that you are also using other form elements.

After your original code, add:

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

That way, ViewHelper is added to all other elements, and for your File element File is used instead.

like image 114
Richard Parnaby-King Avatar answered Sep 28 '22 11:09

Richard Parnaby-King