如何验证要么Zend_Form_Element_File或Zend_Form_Element_Tex

2019-09-19 02:45发布

在我的形式,我希望用户选择一个文件或输入它的URL。 其中的两个选项。

我知道如何写一个验证用于以下两种Zend_Form_Element_Text元素之一,但由于从Zend_Form_Element_File数据是不是在$ _ POST,但在$ _FILES我不知道从哪里开始 - 我不能从Zend_Form_Element_File得到的数据是在我的自定义验证的isValid一个$上下文($价值$语境= NULL)方法。

有任何想法吗?

Answer 1:

一种可能的方法,我能想到的是传递信息,如果该文件已被上传的附加上下文窗体的验证方法:

形成

 $file = new Zend_Form_Element_File('file'); $text = new Zend_Form_Element_Text('text'); $text->setAllowEmpty(false); $text->addValidator(new TextOrFileValidator()); $this->addElement($file); $this->addElement($text); 

调节器

$request = $this->getRequest();

// provide additional context from the form's file upload status
$context = array_merge(
    $this->getRequest()->getPost(),
    array("isUploaded" => $form->file->isUploaded())
);

if ($request->isPost() && $form->isValid($context)) {
}   

验证器

class TextOrFileValidator extends Zend_Validate_Abstract
{

    const ERROR = 'error';

    protected $_messageTemplates = array(
        self::ERROR      => "You either have to upload a file or enter a text",
    );

    function isValid( $value, $context = null ) {

        $hasText = !empty($context['text']);
        $hasFile = $context['isUploaded'];

        if (($hasText && !$hasFile)
            || (!$hasText && $hasFile)
        ) {
            return true;
        }

        $this->_error(self::ERROR);
        return false;

    }
}


文章来源: How to validate either Zend_Form_Element_File or Zend_Form_Element_Text are not empty.