Zend Framework 1.12 - Zend Form File元素触发错误的验证消息

时间:2014-03-25 04:45:42

标签: php zend-framework zend-form

我查看了类似的答案,但找不到任何解决方案。

我的一个表单中有一个文件元素。该元素定义如下。

$file = $this->createElement('file', 'templateFile');
$file->setAttrib('id', 'templateFile')
     ->setAttrib('class', 'form-control')
     ->setAttrib('placeholder', 'File containing template headers')
     ->setLabel('Template File <span class="glyphicons glyphicons-sheriffs_star requiredFlag"></span>')
     ->setRequired(true)
     ->addValidator('NotEmpty', false)
     ->addValidator('Count', false, 1)
     ->addValidator('Size', false, '1MB')
     ->addValidator("Extension", false, array('csv', 'txt'))
     ->addFilter('StringTrim');

$file->getValidator('NotEmpty')->setMessage('Please select a template file');
$file->getValidator('Count')->setMessage(' Please upload one file at a time');
$file->getValidator('Size')->setMessage('File exceeds the upload limit of 1 MB');
$file->getValidator('Extension')->setMessage('Invalid file extension. Only CSV and TXT files are allowed');

我正在使用带有此元素的自定义错误消息,这就是造成问题的原因。

当我在没有选择文件的情况下提交表单而不是触发NotEmpty验证错误消息时,我会看到以下消息。

File 'qhepstow_dblive.sql' exceeds the defined form size

如何在未选择文件时触发以下错误消息,并避免上面提到过的文件?

未选择文件时,应显示此错误消息。

Please select a template file

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。希望它能帮助将来的某个人。

问题在于我将验证器添加到文件elemenet的顺序。

将序列更改为以下解决了问题。

$file = $this->createElement('file', 'templateFile');
        $file->setAttrib('id', 'templateFile')
            ->setAttrib('class', 'form-control')
            ->setAttrib('placeholder', 'File containing template headers')
            ->setLabel('Template File <span class="glyphicons glyphicons-sheriffs_star requiredFlag"></span>')
            ->setDestination($destination)
            ->setRequired(true)
            ->addValidator('Count', false, 1)
            ->addValidator('NotEmpty', false)
            ->addValidator('Size', false, '15MB')
            ->addValidator("Extension", false, array('txt' ,'csv'))
            ->addFilter('StringTrim');