Ошибка с полем Zend File - имя файла не заполняется повторно в форме Zend - PullRequest
2 голосов
/ 24 января 2011

Я заметил, что я считаю ошибкой в ​​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> - это размер файла, а затем сам файл входит во второй <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
) 

Когда форма действительна, загрузка работает нормально, поэтому я не знаю ничего плохого в самом поле файла, но в случае неудачной формы (правильное поле файла, но одно из других полей недействительно), поле файла является единственным полем, которое не заполняется повторно при отображении формы.Так это ошибка?Раздражает необходимость повторного добавления файла, когда с ним все в порядке.Есть ли обходной путь, о котором кто-то может подумать.Я попытался заполнить вручную в случае неправильной формы, надеясь, что это приведет к заполнению поля файла, что-то вроде этого, но это также не сработало.

   if(//valid form){
      //process the form
   } else {
       $form->populate($this->_request->getPost());     
   }

Ответы [ 2 ]

4 голосов
/ 24 января 2011

Это не ошибка с Zend_Form. Это ограничение элемента ввода загрузки файла HTMLs. Браузеры будут игнорировать и устанавливать значения на входе файла по соображениям безопасности. Если этого ограничения не было, вредоносные веб-сайты могли бы предварительно заполнить ввод файла такими вещами, как

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

, а затем автоматически отправлять содержимое вашего жесткого диска на любой сервер.

Один из распространенных способов обойти это - использовать что-то вроде плагина формы ajax для jQuery для отправки загрузки через запрос ajax. При сбое загрузка файла остается выбранной, поскольку обновление страницы отсутствует.

1 голос
/ 24 января 2011

это не ошибка.Некоторые элементы Zend_Form не заполняют функциональность.Это сделано для некоторых конкретных элементов (пароль, файл, ...).Я думаю, что это правильно.

...