Quite often you would want to customize the error message from a validator. One good example is the Zend_Validate_Identical which standard message is something like ‘The two given tokens do not match’. That does not make much sense for the user trying to create an account on a site.
First we need to know what the message variables are called i the validator class. The easiest way to find this is simply to open the class file in Zend Framework for that validator. Validator classes can be found in Zend/Validate/ folder. We look inside the Zend/Validate/Identical.php;
... class Zend_Validate_Identical extends Zend_Validate_Abstract { /** * Error codes * @const string */ const NOT_SAME = 'notSame'; const MISSING_TOKEN = 'missingToken'; /** * Error messages * @var array */ protected $_messageTemplates = array( self::NOT_SAME => 'The two given tokens do not match', self::MISSING_TOKEN => 'No token was provided to match against', ); ...
Here we can see the variables are called: NOT_SAME and MISSING_TOKEN. We will use this knowledge to set our own messages. In our Zend_Form (eg. application/forms/CreateAccount.php)
... $password = new Zend_Form_Element_Password('password'); $password ->setLabel('Password:') ->setDecorators($this->elementDecorators) ->setDescription('3 to 30 characters in length') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('StringLength', false, array(3, 30)); $confirm = new Zend_Form_Element_Password('confirm'); $confirm->setLabel('Confirm password:') ->setDecorators($this->elementDecorators) ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->setAttrib('size', '20') ->addValidator('StringLength', false, array(3, 30)) ->addValidator('Identical', false, array('token' => 'password', 'messages' => array(Zend_Validate_Identical::NOT_SAME => 'Passwords does not match', Zend_Validate_Identical::MISSING_TOKEN => 'No password was provided'))); ...
The argument ‘messages’ in the Validator settings opens up the possibility to set your own messages like above.