2012-05-29 61 views
0

我正在創建一個帶有上傳元素的表單。我創建了以下代碼的文件元素Zend_Form_Element_File(沒有修飾器發現錯誤)

$image = new Zend_Form_Element_File('image'); 
$image->setAttrib('title','Listing Image:') 
     ->addDecorator('File') 
     ->addValidator('Size', false, 204800) 
     ->addValidator('Extension', false, 'jpg,png,gif'); 

    $this->addElement($image); 

只要我能告訴工作正常。它試圖將一個文件元素添加到頁面。我得到一個錯誤,說:「警告:找不到文件裝飾器...無法渲染文件元素...」

正如你所看到的,我已經將元素的裝飾器設置爲文件裝飾器,所以我不確定爲什麼我得到這個錯誤?

值得注意的是我已經刪除了除viewHelper和PrepareElements之外的所有默認裝飾器,並且我使用視圖部分作爲viewHelper來顯示輸出。只需要這個是必需的我還包括下面。

<form method="<?php echo $this->element->getMethod(); ?>" action="<?php echo $this->element->getAction(); ?>"> 
<div class="boxmiddle-Holder"> 
    <div class="boxmiddle-content"> 
     <table border="0" cellspacing="2" cellpadding="3" class="dataTable"> 
      <?php foreach($this->element->getElements() as $element): ?> 

         <!-- if not a button then display label --> 
         <tr> 
          <td><label for="<?php echo $element->getName(); ?>"><?php echo $element->getAttrib('title'); ?></label></td> 

         <td class="normal"><?php echo $element; ?></td> 
         <?php if($element->getMessages()) { 
          foreach($element->getMessages() as $message) { ?> 
           <td> <?php echo "<p class='elementError'>".$message."</p>"; ?></td> 
         <?php } 
         } 
         ?> 
         </tr> 
      <?php endforeach; ?> 
     </table> 
    </div> 
</div> 

任何想法?

回答

1

我會仔細檢查以確保文件修飾符未被清除或稍後重置,該錯誤表示您的表單的文件元素沒有附加到它的Zend_Form_Decorator_File修飾符。

請在圍繞第859行的Zend/Form/Element/File.php處查找引發此錯誤的函數。我懷疑文件裝飾器正在從元素中刪除。這可能是因爲它沒有裝飾者,或者只是缺少裝飾者File

希望有所幫助。

+0

我檢查了所有的代碼,我似乎無法找到刪除裝飾器的任何地方。我能想到的唯一的事情是,我的視圖部分用於渲染上面包含的表單,可能不會輸出裝飾器,即使它具有一個集合? – jjmu15

+0

在你的循環中,在File元素上嘗試'var_dump($ element-> getDecorators());'看看結果是什麼。我很好奇,看看它註冊了什麼。在創建元素時,您可能需要將' - > addDecorator('File')'改爲' - > setDecorator(array('File'))',以便刪除所有現有元素並替換爲文件修飾器。 – drew010

+0

我對它排序。在窗體的底部,我設置了表單元素裝飾器。當使用它時,它似乎覆蓋了我爲各個元素設置的裝飾器。我已經做了什麼來解決它是刪除表單底部的一般設置,並指定它需要的裝飾器的每個元素。 – jjmu15