Zend File Upload и элемент декораторов
У меня проблема, что следующая форма 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'))
));
}
}
Это выдает ошибку.
(Warning: Exception caught by form: No file decorator found... unable to render file element Stack Trace: #0 )
Добавление $uploadElement->addDecorator('File');
в конце после SetElementDecorators
будет работать, но это даст мне элемент файла дважды!
Кто-нибудь может помочь, пожалуйста?
ТИА Мэтт
1 ответ
Решение
Элемент 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.