【问题标题】:Zend_Form_Element_File (no decorator found error)Zend_Form_Element_File (no decorator found 错误)
【发布时间】:2012-05-29 15:28:06
【问题描述】:

我正在创建一个带有上传元素的表单。我用下面的代码创建了文件元素

 $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 之外的所有默认装饰器,并且我使用 view partial 作为 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>

有什么想法吗?

【问题讨论】:

    标签: zend-framework zend-form zend-form-element


    【解决方案1】:

    我会仔细检查以确保 File 装饰器没有被清除或稍后重置,该错误表明您的表单的文件元素没有附加 Zend_Form_Decorator_File 装饰器。

    在第 859 行附近的 Zend/Form/Element/File.php 中查找引发此错误的函数。我怀疑 File 装饰器正在以某种方式从元素中删除。可能是它没有装饰器,或者只是缺少 File 装饰器。

    希望对您有所帮助。

    【讨论】:

    • 我检查了所有代码,但似乎找不到任何删除装饰器的地方。我唯一能想到的是,我用于呈现我上面包含的表单的视图部分可能不会输出装饰器,即使它有一组?
    • 在您的循环中,在 File 元素上尝试 var_dump($element-&gt;getDecorators()); 并查看结果。我很好奇它注册了什么。创建元素时,您可能希望将-&gt;addDecorator('File') 更改为-&gt;setDecorator(array('File')),以便删除所有现有元素并用文件装饰器替换。
    • 我整理好了。在表单的底部,我设置了表单元素装饰器。使用它时,它似乎覆盖了我为单个元素设置的装饰器。我所做的修复它是删除表单底部的常规设置,并为每个元素分配它需要的装饰器。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2014-10-08
    • 2010-11-18
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多