Zend文件上传和元素装饰器

frg*_*v10 6 zend-framework zend-form zend-file

我有问题,以下Zend表格抛出错误.问题是"文件" - 元素和使用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'))
        ));



    }
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误.

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

$uploadElement->addDecorator('File');在最后添加SetElementDecorators将工作,但这将给我文件元素两次!

请帮忙吗?

TIA Matt

Ric*_*ing 10

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'))
));
Run Code Online (Sandbox Code Playgroud)

[编辑]

刚刚注意到您还在使用其他表单元素.

在原始代码之后,添加:

$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'))
    )
);
Run Code Online (Sandbox Code Playgroud)

这样,ViewHelper将添加到所有其他元素,而对于File元素File则使用.