Intereting Posts
Нарушение родительской функции из дочерней функции (PHP Preferrably) Разница между окнами и путями unix SQL-запрос для сопоставления строки, разделенной запятыми, для строки с разделителями-запятыми? Ошибка API-интерфейса Google Translator Toolkit («Multipart должен иметь часть Atom и медиа») Что означают эти два параметра для WScript? Генерировать криптографически безопасные случайные числа в php PHP MySQLI Запретить SQL Injection Получить только имя файла из url в php без каких-либо значений переменных, которые существуют в URL-адресе увеличивать на одну переменную каждый раз, когда вы нажимаете кнопку (PHP) PHP – рассчитать разницу между двумя датами PhP (Codeigniter) Объединение результатов запроса перед циклом foreach Обрезать или замаскировать изображение в круг PHP in_array не находит значение, которое есть PHP удаляет запятые из числовых строк Переименование файла на другом сервере, когда пользователь загружает его – используя PHP

Как проверить либо Zend_Form_Element_File, либо Zend_Form_Element_Text не пустые.

В моей форме я хочу, чтобы пользователь выбирал файл или вводил его URL. Один из двух вариантов.

Я знаю, как написать валидатор для одного из двух элементов Zend_Form_Element_Text, но поскольку данные из Zend_Form_Element_File не находятся в $ _POST, а в $ _FILES, я не знаю, с чего начать – я не могу получить данные из Zend_Form_Element_File, чтобы быть в $ context в isValid ($ value, $ context = null) метод для моего настраиваемого валидатора.

Есть идеи?

Возможным подходом, который я могу представить, является передача информации, если файл был добавлен в качестве дополнительного контекста для метода проверки формы:

форма

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

Validator

 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; } }