Zend File Upload и элемент декораторов - PullRequest
6 голосов
/ 28 сентября 2011

У меня проблема в том, что следующая Zend Form выдает ошибку. Проблема заключается в «file» -элементе и использовании 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'))
        ));



    }
}

Это выдает ошибку.

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

Добавление $uploadElement->addDecorator('File'); в конце после SetElementDecorators сработает, но это даст мне элемент file дважды!

Кто-нибудь может помочь, пожалуйста?

TIA Matt

1 Ответ

10 голосов
/ 28 сентября 2011

Для элемента File требуется собственный декоратор - 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'))
));

[править]

Только что заметил, что вы также используете другие элементы формы.

После исходного кода добавьте:

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

Таким образом, ViewHelper добавляется ко всем остальным элементам, и вместо него используется элемент File.

...