Валидатор условного подсчета файлов для Zend_Form_File_Element - PullRequest
0 голосов
/ 18 января 2012

В моем проекте есть форма, в которой пользователю необходимо загрузить файл или указать какую-либо другую информацию, например, при вводе текста.

Я знаю, что есть возможность присоединить валидатор Count.в элемент формы, и это работает так:

$upload->addValidator('Count', false, array('min' => 1, 'max' => 3));

Этот валидатор вызывается, независимо от того, есть загруженные файлы или нет.Но как только я заменяю валидатор пользовательской версией и не загружаю никаких файлов, валидатор не вызывается.

Глядя на метод isValid () Zend_File_Transfer_Adapter_Abstract, я вижу проблему:

[...]
    foreach($check as $key => $content) {
        if (array_key_exists('validators', $content) &&
            in_array('Zend_Validate_File_Count', $content['validators'])) {
            $validator = $this->_validators['Zend_Validate_File_Count'];
            $count     = $content;
[...]

Похоже, граф Валидатор получил здесь особую обработку.Но как я могу включить мой настроенный Validator, не переписывая Zend Files?

Поскольку мы не расширяем класс Zend_Form, к сожалению, я также не могу перезаписать метод isValid () соответствующей формы.Любые идеи остались?Спасибо за ваше время!

1 Ответ

1 голос
/ 21 января 2012

Это, вероятно, будет проще всего с небольшим количеством Ajax. Таким образом, вы можете оценить выбор до публикации формы.
Чтобы сделать это в PHP, валидатор Element, вероятно, не тот путь. Было бы лучше обработать выделение с помощью if ().

pseudocode...
//if file element contains something and text doesn't
if($this->getRequest->getPost('file'=='' && 'text' != ''){
    $file = $form->file->receive();

    //do some stuff
//if text element contains something and file dosen't
}elseif ($this->getRequst->getPost('file' != '' && 'text' == '') {
    if($form->isValid($this->_request->getPost('text')) {
      //do some stuff
    }
}

Это идея, надеюсь, она поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...