Zend framework 如何在Zend controller或表单中验证文件上载时的文件名长度

Zend framework 如何在Zend controller或表单中验证文件上载时的文件名长度,zend-framework,file-upload,long-filenames,Zend Framework,File Upload,Long Filenames,我尝试为从Zend表单上传的文件名长度添加一个验证器。 我不知道是应该将此验证器添加到表单本身中,还是添加到处理上载的Zend\u文件\u传输\u适配器\u Http。然而,现在我正在尝试第二件事——请参阅下面的代码。如果要上载的文件名长度超过40个字符,我希望控制器使用错误标志重定向。 $upload即使文件名长度为41个字符,仍然有效-为什么? $upload = new Zend_File_Transfer_Adapter_Http(); $upload->addValidator

我尝试为从Zend表单上传的文件名长度添加一个验证器。 我不知道是应该将此验证器添加到表单本身中,还是添加到处理上载的
Zend\u文件\u传输\u适配器\u Http
。然而,现在我正在尝试第二件事——请参阅下面的代码。如果要上载的文件名长度超过40个字符,我希望控制器使用错误标志重定向。

$upload
即使文件名长度为41个字符,仍然有效-为什么?

$upload = new Zend_File_Transfer_Adapter_Http();

$upload->addValidators(
        array(
            array('validator' => 'StringLength', 'options' => array(
                'min' => 0,
                'max' => 40))
        )
);

if (!$upload->isValid()) {
    $this->_redirect('/customer/uploadfile/groupid/'.$groupId.'/flag/XXX-TODO-Failure');
}

看起来您没有用显示的代码验证任何内容

按如下方式更改行以引用文件名,例如

if(!$upload->isValid( $filenameToValidate ) {
…}


还要记住,文件名不是帖子,而是在$\u FILES superglobal中找到的。

就是这样!也许我今天太累了。只有两个补充:1)在我的代码示例中,我没有指定要使用“0”和“40”设置哪些StringLength验证器属性,因此最大字符串长度甚至没有正确设置。我编辑了我的示例以显式设置“min”和“max”。2) 我发现我可以通过ZFs函数$upload->getfilename('doc_path',false)获取上传文件名,而不是访问$u文件。不过,我不知道该推荐哪种方法。