无法在Zend_form中呈现File元素

时间:2015-01-05 20:42:58

标签: php zend-framework file-upload

我有一个简单的问题,但是我在谷歌上搜索了大约2-3个小时,却一无所获。所以,这是我的表单代码片段:

$element = new Zend_Form_Element_File("photo");
    $element->setRequired()
                    ->setDestination(realpath(APPLICATION_PATH . '/../public/uploaded_photos'))
                    ->addValidator('Count', false, 1)
                    ->addValidator('Size', false, 102400)
                    ->addValidator('Extension', false, 'jpg,png,gif') -> addValidator(new Zend_Validate_NotEmpty())
                    ->setAllowEmpty(false);
    $this->addElement($element);

$this->setDecorators(array(
array('ViewScript', array('viewScript' => 'forms/_form_addFile.phtml'))));
    $this->setElementDecorators(array('ViewHelper'));

但是代替文件输入我有这个警告:

  

警告:找不到文件装饰器...无法在第2060行的/home/wroblewski/ZendFramework-1.12.3/library/Zend/Form/Element.php中呈现文件元素

Somemody可能知道如何修复它?我不知道我现在应该怎么做,因为我从未使用过File输入。请帮助:)

1 个答案:

答案 0 :(得分:1)

您可以尝试在表单中设置装饰器后添加文件元素,即在$this->addElement($element);之后放置$this->setElementDecorators(array('ViewHelper'));

这是因为$this->setElementDecorators会删除默认情况下已在元素中设置的所有装饰器,并且只会设置通过$this->setElementDecorators()设置的装饰器,在这种情况下只会ViewHelper将在文件元素中设置。但是文件元素需要更多装饰器来渲染元素。因此,在设置装饰器后添加元素将阻止它删除所需的元素。

或者您可以指定要以数组格式排除的元素作为函数的第二个参数。检查Zend/Form.php第2832行。

/**
 * Set all element decorators as specified
 *
 * @param  array $decorators
 * @param  array|null $elements Specific elements to decorate or exclude from decoration
 * @param  bool $include Whether $elements is an inclusion or exclusion list
 * @return Zend_Form
 */
public function setElementDecorators(array $decorators, array $elements = null, $include = true)
{
.
.