2012-06-25 49 views
0

我为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?

回答

0

尝试这样的:

<?php echo $this->element->avatarimage;?> 
+0

这半解决了我的问题。当我这样做时,我会获得附加到avatarimage元素(dt和dd)的额外html内容。与其他每个元素一样,调用renderViewHelper只返回输入html。 – jkushner

+1

您需要从表单类的元素中移除装饰器。例如$ element-> removeDecorator('DtDdWrapper'); – dimirc

+0

顺便说一句,你也可以删除其他装饰:$ element-> removeDecorator('label')$ element-> removeDecorator('htmlTag');你可以在这里阅读更多关于装饰器http://framework.zend.com/manual/en/zend.form.standardDecorators.html – dimirc

3

这应该肯定的工作。

<? echo $this->element->avatarimage->renderFile(); ?> 
+0

上帝保佑你,无论你身在何处。这节省了我很多时间。 –

+0

非常感谢:-) – naquiuddin