文件上传表单验证无效

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。 在这种情况下,不存在的文件元素未被验证。

如果您提交的表单字段为空,也请查看此处的 hotfixhttp://framework.zend.com/issues/browse/ZF-11707