2012-06-25 58 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