1

私のフォームでは、ユーザーにファイルを選択するか、そのURLを入力してもらいたいです。2つのオプションのいずれか。

2つのZend_Form_Element_Text要素のいずれかのバリデーターを作成する方法を知っていますが、Zend_Form_Element_Fileからのデータは$_POSTではなく$_FILESにあるため、どこから始めればよいかわかりません-Zend_Form_Element_Fileからデータを取得できませんカスタムバリデーターのisValid($ value、$ context = null)メソッドの$context。

何か案は?

4

1 に答える 1

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;

    }
}
于 2012-07-05T19:17:00.933 に答える