Zend_Validate_Abstract настраиваемый валидатор не отображает правильные сообщения об ошибках - PullRequest
1 голос
/ 15 мая 2010

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

Пользовательский валидатор, который я написал, расширяет Zend_Validate_Abstract и работает правильно, так как передает правильные сообщения об ошибках. В этом случае либо: isEmpty или isMatch.

Однако в документации сказано использовать addErrorMessages для определения правильных отображаемых сообщений об ошибках.

в этом случае я приложил

->addErrorMessages(array("isEmpty"=>"foo", "isMatch"=>"bar"));

в поле формы.

В соответствии со всем, что я прочитал, если я возвращаю isEmpty из isValid (), мое сообщение об ошибке должно иметь значение «foo», а если я возвращаю «isMatch», то оно должно читать «bar».

Это не тот случай, с которым я сталкиваюсь. Если я верну false из valid, независимо от того, что я установил $ this -> _ error (), мое сообщение об ошибке отображает «foo», или что-то еще, что у меня есть в index [0] массива сообщений об ошибках.

Если я не определяю errorMessages, то я просто получаю код ошибки, который я передал обратно для отображения, и получаю правильный, в зависимости от того, что я передал обратно.

Как мне перехватить код ошибки и отобразить правильное сообщение об ошибке в моей форме?

Исправление, которое я реализовал, до тех пор, пока я не разберусь с ним, заключается в передаче полного сообщения в виде кода ошибки из пользовательского валидатора. В этом случае это будет работать, но сообщение об ошибке относится только к этой странице и не позволяет повторно использовать код.

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

->setRequired("true")  
->addValidator("NotEmpty")  
->addErrorMessage("URL May Not Be Empty")  
->addValidator([*customValidator]*)  
->addErrorMessage("X and Y urls may not be the same")  

Но, опять же, если выдается сообщение об ошибке, отображается последнее установленное сообщение об ошибке, независимо от того, какая ошибка действительно есть.

Я не совсем уверен, куда идти отсюда.

Есть предложения?

1 Ответ

2 голосов
/ 16 мая 2010

Я думаю, вы неверно истолковали руководство. Там написано

addErrorMessage ($ message) : добавить сообщение об ошибке для отображения в форме ошибки проверки. Вы можете назвать это более одного раза, и новые сообщения добавлен в стек.

addErrorMessages (array $ messages) : добавить несколько сообщений об ошибках для отображения на ошибки проверки формы.

Эти функции добавляют пользовательские сообщения об ошибках в целый стек форм.

Если вы хотите отображать сообщения об ошибках проверки при сбое проверки, вы должны внедрить это сообщение в ваш валидатор.

т.

const EMPTY = 'empty';

protected $_messageTemplates = array(
  self::EMPTY => "Value is required and can't be empty",
);

public function isValid($value)
{
  if(empty($value)) {
    $this->_error(self::EMPTY);
    return false;
  }

  return true;
}

Таким образом, после сбоя проверки вы можете получить коды ошибок с помощью $validator->getErrors() и сообщения об ошибках с помощью $validator->getMessages().

Если вы правильно определили $_messageTemplates, Zend_Form автоматически использует сообщения об ошибках вместо кодов ошибок и распечатывает их.

Надеюсь, это поможет.

...