paolo@bimodesign.com | +34 608 61 64 10

Framework

        

Zend - addValidator: email (bug risolto)

Dalla comunita' di sviluppatori e' stato riscontrato un bug nella visualizzazione dell'errore di tipo email in un campo di input. Il bug consiste nell'impossibilita' di evitare di visualizzare tutti i messaggi di errore relativi ad un indirizzo di email errato, come invece e' possibile adottare utilizzando il secondo parametro breakChainOnFailure del addValidator.
Provate ad esempio ad inserire un indirizzo di questo tipo nella vostra form qwerty@1111.dffgh

Come spiegato perfettamente in questo forum http://www.zfforums.com/zend-framework-general-discussions-1/general-q-zend-framework-2/how-can-i-get-just-1-error-message-emailaddress-validator-instead-multiple-2582.html il problema risiede nel fatto che emailAddress validator ha 7 tipi di template di errore, come e' possibile visualizzare leggendo la relativa classe

class Zend_Validate_EmailAddress extends Zend_Validate_Abstract{
const INVALID = 'emailAddressInvalid';
const INVALID_HOSTNAME = 'emailAddressInvalidHostname';
const INVALID_MX_RECORD = 'emailAddressInvalidMxRecord';
const DOT_ATOM = 'emailAddressDotAtom';
const QUOTED_STRING = 'emailAddressQuotedString';
const INVALID_LOCAL_PART = 'emailAddressInvalidLocalPart';
const LENGTH_EXCEEDED = 'emailAddressLengthExceeded';

protected $_messageTemplates = array(
self::INVALID => "'%value%' is not a valid email address in the basic format local-part@hostname",
self::INVALID_HOSTNAME => "'%hostname%' is not a valid hostname for email address '%value%'",
self::INVALID_MX_RECORD => "'%hostname%' does not appear to have a valid MX record for the email address '%value%'",
self:OT_ATOM => "'%localPart%' not matched against dot-atom format",
self::QUOTED_STRING => "'%localPart%' not matched against quoted-string format",
self::INVALID_LOCAL_PART => "'%localPart%' is not a valid local part for email address '%value%'",
self::LENGTH_EXCEEDED => "'%value%' exceeds the allowed length"
);

...
}

Per risolvere questo bug, che puo' dare problemi di natura grafica, nell'output della stessa form, occorre, come indicato nell'ultimo post del forum indicato all'inizio, modificare la funzione getMessage() della classe base Zend_Validate_Abstract estendendo la classe Zend_Validate_EmailAddress (che a sua volta la estende) in questo modo

class My_Validator_EmailCheck extends Zend_Validate_EmailAddress {
	public function getMessages() {
		$messages = array_values($this->_messages);
		return (array)$messages[0]; //Return only the first error for each time
	}
}

In questo modo verra' visualizzato solo un errore, il primo della lista.