我遇到问题,以下Zend Form会抛出错误。 问题是“文件” - 元素和使用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
会有效,但这会给我两次文件元素!
有人可以帮忙吗?
TIA 马特
答案 0 :(得分: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'))
));
[编辑]
刚刚注意到您还在使用其他表单元素。
在原始代码之后,添加:
$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元素File。