Zend_Form_Element_File のバグと思われるものに気付きました。他の人がテストして、同じ結果が得られるかどうか教えてください。失敗したフォームでは、Element_File の値を除くすべてのフィールドが再入力されます。
私のフォームには 2 つのテキスト フィールドと 1 つのファイル フィールドがあり、すべて必須です。
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name');
$name->setRequired(true);
$this->addElement($name);
$name2 = new Zend_Form_Element_Text('name2');
$name2->setLabel('Name2');
$name2->setRequired(true);
$this->addElement($name2);
$file = new Zend_Form_Element_File('file');
$file->setLabel('Test file')
->setDestination(APPLICATION_PATH);
$file->setRequired(true);
$this->addElement($file);
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Submit')
$this->addElement($submit);
通常、フォームが失敗すると、入力されたフィールドはすべて自動的に入力されますが、ファイル フィールドでは機能せず、修正が必要な他のフィールドを修正するだけでなく、手動でファイルを再度選択する必要があります。
まず第一に、他の人はこれを確認できますか?
問題はファイル フィールドのマークアップに関連していると思います。最初<input>
はファイル サイズで、次にファイル自体が 2 番目にあることがわかります<input>
。
<dd>
<input type="hidden" id="MAX_FILE_SIZE" value="67108864" name="MAX_FILE_SIZE">
<input type="file" id="file" name="file">
</dd>
有効なフォームが送信されると、投稿データには、ファイル自体ではなく<input>
サイズである最初のファイル フィールドのみが表示されます。[MAX_FILE_SIZE] => 67108864
Array (
[name] => test
[MAX_FILE_SIZE] => 67108864
)
フォームが有効な場合、アップロードは正常に機能するため、ファイル フィールド自体に問題がないことはわかっていますが、フォームが失敗した場合 (ファイル フィールドは正しいが、他のフィールドの 1 つが無効である)、ファイル フィールドが唯一のフィールドです。フォームがレンダリングされるときに再入力されません。これはバグですか?何も問題がなかったのにファイルを追加し直さなければならないのは面倒です。誰かが考えることができる回避策はありますか。無効なフォームの場合に手動で入力しようとしましたが、このようにファイルフィールドに入力を強制することを期待していましたが、うまくいきませんでした。
if(//valid form){
//process the form
} else {
$form->populate($this->_request->getPost());
}