2013-09-25 3 views
2

I'v creatated пользовательского валидатора:Zend Form Form не displayin сообщение об ошибке от валидатора

class MyValidator extends AbstractValidator 
{ 
    const ERROR_CONST = 'error'; 

    protected $dbAdapter; 
    protected $messageTemplates = array(
     self::ERROR_CONST => "Error msg for '%value%'." 
    ); 

    public function __construct($dbAdapter) 
    { 
     $this->dbAdapter = $dbAdapter; 
    } 

    public function isValid($value, $context = null) 
    { 
     $this->setValue($value); 
     /** 
     * Do validation against db 
     */ 

     if(/* Not valid */){ 
      $this->error(self::ERROR_CONST); 
      return false; 
     } 
     return true; 
    } 
} 

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

echo $this->formElementErrors($form->get('action')); 

Все, что выводится, представляет собой пустой UL. Это проблема переводчика? Когда я делаю get_class на $ this-> getTranslator() в валидаторе, я получаю имя класса валидатора. Когда я var_dump $ this-> getTranslator(), он выводит значение null. Должен ли я настроить переводчика для этого, чтобы он работал, и где было бы лучше всего установить этот переводчик, чтобы он был системным для моих собственных валидаторов?

+0

Не могли бы вы поместить код, как вы его используете? –

ответ

2

Поскольку вы определяете метод __construct для вашего класса валидатора, родительский __construct не неявно называется: http://php.net/manual/en/language.oop5.decon.php (смотрите примечание)

Вы должны изменить свой __construct метод:

public function __construct($dbAdapter) 
{ 
    $this->dbAdapter = $dbAdapter; 
    //parent::__construct($options); 
    parent::__construct(null); // or (void) 
} 

Как вы можете видеть, $messageTemplates и $messageVariables «загружены» от AbstractValidator::__construct, для использования в некоторых методах ()включен):

https://github.com/zendframework/zf2/blob/master/library/Zend/Validator/AbstractValidator.php#L73-L79

+0

Просто так. Иногда вам просто нужно, чтобы кто-то указал на очевидное. Спасибо! – Borje

0

Возможно, вы забыли добавить messageVariables?

/** 
* Message variables 
* @var array 
*/ 
protected $messageVariables = array(
    'value' => 'value', 
); 
+0

Я не использую никаких переменных, кроме параметра значения. В соответствии с документами необязательно указывать переменную messageVariables. Но просто, чтобы попробовать, я хочу, чтобы все это добавило, но все равно не повезло. – Borje

Смежные вопросы