我注意到我认为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());
}
答案 0 :(得分:4)
这不是Zend_Form
的错误。这是HTMLs文件上传输入元素的限制。出于安全原因,浏览器将忽略文件输入上的值并设置值。如果没有此限制,恶意网站可以使用
/etc/password
c:\Windows\Location\Of\Sensative\File.txt
然后自动将硬盘驱动器的内容发布到任何服务器。
一个常见的工作是使用类似ajax form plugin的jQuery来通过ajax请求发布上传。当它失败时,文件上传保持选中状态,因为没有页面刷新。
答案 1 :(得分:1)
这不是一个错误。一些Zend_Form元素没有重新填充功能。这是针对某些特定元素(密码,文件,...)。我认为这是正确的。