Here’s a tip for the symfony folks:

adding multiple postvalidators:

$this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare(‘password’, sfValidatorSchemaCompare::EQUAL, ‘password_again’, array(), array(‘invalid’=> ‘Password and Password Again do not match.’)));
$this->mergePostValidator(new sfValidatorSchemaCompare(‘email’, sfValidatorSchemaCompare::EQUAL, ‘email_again’, array(), array(‘invalid’=> ‘Email and Email Again do not match.’)));

If you use sfValidatorAnd in your forms, the individual error messages no longer matter.  The error message of the sfValidatorAnd is used instead.

‘email’             => new sfValidatorAnd(array(
new sfValidatorString(array(‘max_length’ => 60)),
new sfValidatorEmail()), array(), array(‘required’=>’Email is required.’, ‘invalid’=>’Email is invalid.’)),

Finally, to get to all the errors in the form:

$form->getErrorSchema()->getErrors()

to get to all the global errors in the form:

$form->getGlobalErrors()