在我的表单中,我希望用户选择一个文件或输入它的 URL。两个选项之一。
我知道如何为两个 Zend_Form_Element_Text 元素之一编写验证器,但由于来自 Zend_Form_Element_File 的数据不在 $_POST 但在 $_FILES 我不知道从哪里开始 - 我无法从 Zend_Form_Element_File 获取数据我的自定义验证器的 isValid($value, $context = null) 方法中的 $context。
有任何想法吗?
在我的表单中,我希望用户选择一个文件或输入它的 URL。两个选项之一。
我知道如何为两个 Zend_Form_Element_Text 元素之一编写验证器,但由于来自 Zend_Form_Element_File 的数据不在 $_POST 但在 $_FILES 我不知道从哪里开始 - 我无法从 Zend_Form_Element_File 获取数据我的自定义验证器的 isValid($value, $context = null) 方法中的 $context。
有任何想法吗?
如果文件已作为附加上下文上传到表单的验证方法,我能想到的一种可能方法是传递信息:
形式
$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;
}
}