文件上传表单验证无效
File upload form validation invalid
当前形式:
$main = new Zend_Form_SubForm();
$kids = new Zend_Form_SubForm();
$number = $main->addElement(... attribs and so on ...);
$this->addSubForms(array('main'=>$main,'kids'=>$kids));
当我将此文件上传字段添加到我的表单时:
for($index = 1; $index <= 10; $index++) {
$name = 'Image'.$index;
$label = 'Image'.$index;
$image = new Zend_Form_Element_File($name);
$image->setLabel($label)
->addValidator('Count', true, 1)
->addValidator('Size', false, 10485760)
->addValidator('Extension', false, 'jpg,jpeg,tif,tiff,eps');
$kids->addElement($image);
}
我的控制器中的以下部分将失败:
$post = $this->_request->getPost();
if($form->isValid($post) )
并且不会有任何formerror输出。
错误报告已打开,以下部分(如果无效)也不会return任何警告或错误消息!
else {
print_r($form->getMessages());
print_r($form->getErrors());
print_r($form->getErrorMessages());
}
我正在使用标准的 Zend 表单 isvalid 函数:
public function isValid($data)
{
$isValid = parent::isValid($data);
return $isValid;
}
这里有什么问题吗?
顺便说一句:
打印出 post 数据看起来也不错。
而且我已经将 Zend 更新到版本 1.12.13,没有任何改进:(
如果有人感兴趣并且可能遇到同样的问题,我终于找到了 解决方案:
解决方案一:
问题是,提交的 $_FILES 被限制为 20 个文件上传字段。请参阅 php ini max_file_uploads
-> http://php.net/manual/en/ini.core.php#ini.max-file-uploads。
这就是为什么 Zend 总是说表单未经验证。奇怪,因为没有给你提示的错误消息。
顺便说一句,如果您安装了 php 扩展 suhosin
,php 中的参数将被覆盖:它带有自己的上传限制:suhosin.upload.max_uploads
方案二:
另一个解决方案是使用 $form->isValidPartial
而不是 $form->isValid
。
在这种情况下,不存在的文件元素未被验证。
如果您提交的表单字段为空,也请查看此处的 hotfix:
http://framework.zend.com/issues/browse/ZF-11707
当前形式:
$main = new Zend_Form_SubForm();
$kids = new Zend_Form_SubForm();
$number = $main->addElement(... attribs and so on ...);
$this->addSubForms(array('main'=>$main,'kids'=>$kids));
当我将此文件上传字段添加到我的表单时:
for($index = 1; $index <= 10; $index++) {
$name = 'Image'.$index;
$label = 'Image'.$index;
$image = new Zend_Form_Element_File($name);
$image->setLabel($label)
->addValidator('Count', true, 1)
->addValidator('Size', false, 10485760)
->addValidator('Extension', false, 'jpg,jpeg,tif,tiff,eps');
$kids->addElement($image);
}
我的控制器中的以下部分将失败:
$post = $this->_request->getPost();
if($form->isValid($post) )
并且不会有任何formerror输出。
错误报告已打开,以下部分(如果无效)也不会return任何警告或错误消息!
else {
print_r($form->getMessages());
print_r($form->getErrors());
print_r($form->getErrorMessages());
}
我正在使用标准的 Zend 表单 isvalid 函数:
public function isValid($data)
{
$isValid = parent::isValid($data);
return $isValid;
}
这里有什么问题吗?
顺便说一句: 打印出 post 数据看起来也不错。 而且我已经将 Zend 更新到版本 1.12.13,没有任何改进:(
如果有人感兴趣并且可能遇到同样的问题,我终于找到了 解决方案:
解决方案一:
问题是,提交的 $_FILES 被限制为 20 个文件上传字段。请参阅 php ini max_file_uploads
-> http://php.net/manual/en/ini.core.php#ini.max-file-uploads。
这就是为什么 Zend 总是说表单未经验证。奇怪,因为没有给你提示的错误消息。
顺便说一句,如果您安装了 php 扩展 suhosin
,php 中的参数将被覆盖:它带有自己的上传限制:suhosin.upload.max_uploads
方案二:
另一个解决方案是使用 $form->isValidPartial
而不是 $form->isValid
。
在这种情况下,不存在的文件元素未被验证。
如果您提交的表单字段为空,也请查看此处的 hotfix: http://framework.zend.com/issues/browse/ZF-11707