Pracując przy ostatnim projekcie bazującym na Zend Framework 2 napotkałem dziwny błąd. Mianowicie dla pól formularza, które miały atrybut required miały ustawiony na true, nie mogłem ustawić własnego komunikatu błędu. Pomimo tego, że walidator dla tego pola ustawiony w InputFilter, wyglądał na prawidłowy, wyświetlana była domyślna wartość komunikatu błędu.
array( 'name' => 'NotEmpty', 'options' => array( 'messages' => array( NotEmpty::IS_EMPTY => 'Pole nie może być puste', ) ) ),
Okazało się, że problem nie leżał w samej definicji walidatora. Po zaglądnięciu do klasy Zend\InputFilter\Input i trafieniu do metody injectNotEmptyValidator() zauważyłem następujący fragment kodu:
// Check if NotEmpty validator is already first in chain $validators = $chain->getValidators(); if (isset($validators[0]['instance']) && $validators[0]['instance'] instanceof NotEmpty ) {
Czyli pojawiał się tutaj warunek konieczny, aby walidator NotEmpty był pierwszym zdefiniowanym w łańcuchu walidatorów.
Tak więc w przypadku pojawiania się tego problemu są dwie opcje:
1. Zdefiniować walidator NotEmpty jako pierwszy
2. Pobrać najnowszą wersję Zend Framework 2, w której bład ten został usunięty.