文件上传表单验证无效

时间:2015-05-27 18:12:16

标签: php zend-framework

目前的表格:

$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) )

并且不会输出任何错误。

错误报告已启用,以下部分(如果无效)也不会返回任何警告或错误消息!

else {  
    print_r($form->getMessages());
    print_r($form->getErrors());
    print_r($form->getErrorMessages());
}

我正在使用标准的Zend格式无效函数:

public function isValid($data)
{

    $isValid = parent::isValid($data);
    return $isValid;

}

这可能是错的?

顺便说一下: 打印出帖子数据看起来也很好。 我已经将Zend更新到版本1.12.13而没有任何改进:(

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣并且可能遇到同样的问题,我终于得到了解决方案

解决方案1: 问题是,提交的$ _FILES仅限于20个文件上传字段。请参阅php ini max_file_uploads - &gt; http://php.net/manual/en/ini.core.php#ini.max-file-uploads。 这就是为什么Zend总是说表单没有经过验证。奇怪,因为没有给出提示的错误消息。

顺便说一下,如果您安装了php扩展程序suhosin,那么来自php的参数将被覆盖:它带有自己的上传限制:suhosin.upload.max_uploads

解决方案2: 另一种解决方案是使用$form->isValidPartial代替$form->isValid。 在这种情况下,不存在验证不存在的文件元素。

如果您提交空表单字段,请在此处查看修补程序http://framework.zend.com/issues/browse/ZF-11707