2012-05-29 110 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