2

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());     
   }
4

2 に答える 2

4

これは のバグではありませんZend_Form。HTMLsファイルアップロード入力要素の制限です。セキュリティ上の理由から、ブラウザはファイル入力を無視し、値を設定します。この制限が設定されていない場合、悪意のある Web サイトはファイル入力に次のようなものを事前に入力する可能性があります。

/etc/password
c:\Windows\Location\Of\Sensative\File.txt

次に、ハードドライブの内容を任意のサーバーに自動投稿します。

一般的な回避策の 1 つは、jQuery 用のajax フォーム プラグインなどを使用して、ajax リクエスト経由でアップロードを送信することです。失敗すると、ページが更新されないため、ファイルのアップロードが選択されたままになります。

于 2011-01-24T08:54:52.940 に答える
1

それはバグではありません。一部の Zend_Form 要素には再入力機能がありません。これにより、特定の要素(パスワード、ファイルなど)が作成されました。正しいと思います。

于 2011-01-24T08:49:45.363 に答える