Zend文件字段的错误 - 文件名不会以zend格式重新填充

时间:2011-01-24 08:32:09

标签: php zend-framework zend-form zend-form-element

我注意到我认为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 个答案:

答案 0 :(得分:4)

这不是Zend_Form的错误。这是HTMLs文件上传输入元素的限制。出于安全原因,浏览器将忽略文件输入上的值并设置值。如果没有此限制,恶意网站可以使用

之类的内容预先填充文件输入
/etc/password
c:\Windows\Location\Of\Sensative\File.txt

然后自动将硬盘驱动器的内容发布到任何服务器。

一个常见的工作是使用类似ajax form plugin的jQuery来通过ajax请求发布上传。当它失败时,文件上传保持选中状态,因为没有页面刷新。

答案 1 :(得分:1)

这不是一个错误。一些Zend_Form元素没有重新填充功能。这是针对某些特定元素(密码,文件,...)。我认为这是正确的。