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() を呼び出すと、ファイルが自動的に受信されます。この動作の背後にある理由は、ファイル自体が file 要素の値であるためです。

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

この動作を変更したくない場合に、この動作を変更する方法の例がいくつかありますが、私には理にかなっているように思えます。

于 2013-01-30T15:58:23.007 に答える