我为zend表单创建了一个自定义的viewscript。在表单中,有一个文件元素。当我运行代码echo $this->element->elementname->renderViewHelper()
时,它可以在除文件元素之外的所有元素上正常工作。当我将定制viewscript内运行我的文件元素在下面的代码,我得到以下错误:Uncaught exception 'Zend_Form_Element_Exception' with message 'Decorator by name ViewHelper does not exist'
Zend Custom ViewScript for Form not rendering file element
<?php if($this->element->avatarimage->hasErrors()):?>
<div class="control-group error">
<?php else: ?>
<div class="control-group">
<?php endif;?>
<label for="avatarimage" class="control-label">Avatar Image</label>
<div class="controls">
<?php echo $this->element->avatarimage->renderViewHelper();?>
<?php if($this->element->avatarimage->hasErrors()):
$messages = $this->element->avatarimage->getMessages();
$messages = array_values($messages);
$message = $messages[0];
echo '<span class="help-inline">'.$message.'</span>';
endif;
?>
</div>
</div>
我怎么可以将我的文件元素为我的自定义窗体viewscript?
这半解决了我的问题。当我这样做时,我会获得附加到avatarimage元素(dt和dd)的额外html内容。与其他每个元素一样,调用renderViewHelper只返回输入html。 – jkushner
您需要从表单类的元素中移除装饰器。例如$ element-> removeDecorator('DtDdWrapper'); – dimirc
顺便说一句,你也可以删除其他装饰:$ element-> removeDecorator('label')$ element-> removeDecorator('htmlTag');你可以在这里阅读更多关于装饰器http://framework.zend.com/manual/en/zend.form.standardDecorators.html – dimirc