1

我对 Zend Framework 还很陌生,遇到了一些奇怪的事情,我希望有人能够解释。考虑以下代码:

<? class Form extends Zend_Form
{
    public function init()
    {
    $upload = new Zend_Form_Element_File('upload');
    $this->addElement($upload);
    }    
}

if ($_POST)
{
    $form = new Form();
    var_dump($form->isValid($_POST));
    $values = $form->getValues();

    var_dump($_FILES, file_exists($_FILES['upload']['tmp_name']));
    exit;
}
?>
<form method="post" enctype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" name="submit"/>
</form>

如果上传任何文件,$_FILES 的 var_dump 将输出上传的文件不存在。注释 $form->getValues() 行,它就在那里。调查问题后 - getValues 将实际文件(即 /tmp/php/phpBUI9M3)重命名为上传文件的名称,并将其保存在同一文件夹中(即 /tmp/php/test.png)。为什么?我的印象是 getValues 不应该改变任何数据。

PHP:5.2.17,Zend:1.10.4

谢谢!

4

1 回答 1

1

从手册:

默认情况下,当您在表单上调用 getValues() 时,将自动接收该文件。这种行为背后的原因是,文件本身就是文件元素的值。

http://framework.zend.com/manual/1.12/en/zend.form.standardElements.html#zend.form.standardElements.file

如果这不是您想要发生的情况,有一些示例说明如何更改此行为,但这对我来说似乎是合乎逻辑的。

于 2013-01-30T15:58:23.007 回答