Tag Archives

2 Articles
Android Form Validator Preview
Les bulles sont disponibles en natif sur Android

Android Form Validator Preview

Voici une Library de ma composition servant à gérer, comme sous le Framework Zend PHP, la validation des formulaires. Les classes ont été calquées pour s’utiliser comme sous Zend et, de plus, elle permet facilement de créer de nouveaux validateurs.

La library est encore en phase de développement. Pour les impatients, vous la trouverez ici. Aucun JAR n’est disponible pour l’instant car j’utilise les fichiers ressource Android.

Utilisez donc mon projet comme un « Library Project » ou importez directement les sources dedans tant que vous indiquez la provenance. Dans les sources, vous trouverez une Activity d’exemple vous montrant comment vous servir des différents validateurs disponibles pour l’instant à savoir :

  • ConfirmValidator : Permet de vérifier si le champ de confirmation est valide (ex : confirmation mot de passe)
  • EmailValidator : Permet de vérifier si l’email saisit est valide.
  • NotEmptyValidator : Permet de savoir si un champ a bien été saisit
  • OrTwoFieldsEmptyValidator : Permet de vérifier si, entre deux champs, au moins l’un des deux a été saisit.
  • UrlValidator : Permet de savoir si un champ URL a été correctement saisit.

Chaque Validator est rattaché à un objet Validate propre. Ce champ validate permet de créer des chaines de validation en sachant que le premier Validator entré sera le premier testé.

EditText field1;

// Création du Validate pour notre champ1 :
Validate valField1 = new Validate(field1);

// Ajout de nos différents validateurs du premier à tester au dernier
valField1.addValidator(new EmailValidator(mContext));
valField1.addValidator(new NotEmptyValidator(mContext));

Certains Validators sont particuliers et s’utilisent sur deux champs en même temps (pour le ConfirmValidator et le OrTwoFieldsEmptyValidator).

EditText password;
EditText confirmPassword;

ConfirmValidator confirmFields = new ConfirmValidator(password, confirmPassword);

Tous les Objets Validates créés sont rajoutés à un Form. Et c’est ce Form qui permettra de vérifier si votre formulaire est valide.

Form form = new Form();
form.addValidates(valField1);
form.addValidates(confirmFields);

Pour vérifier si votre formulaire est valide. Il suffit juste de faire un if tout simple :

if(form.validate())
{
    // Traitement de votre formulaire
}

Et, en cas d’erreur, des bulles apparaissent sur les champs invalides comme ceci :

]1 Les bulles sont disponibles en natif sur Android

Comme vous le voyez, son utilisation reste très simple. Ensuite, sachez que vous pouvez créer facilement de nouveaux Validators pour vos formulaires. Pour ce faire, vous avez juste à créer une classe d’héritant de Validator :

/**
 * Classe servant à créer de nouveaux Validators
 * @author throrin19
 *
 */
public abstract class Validator {

    protected Context mContext;

    public Validator(Context c){
        mContext = c;
    }

    /**
     * Permet de vérifier si la valeur passée en paramètre est valide ou non.
     * @param value
     *         {@link Object} : la valeur à valider
     * @return
     *         boolean : true si valide, false sinon.
     */
    public abstract boolean isValid(Object value);

    /**
     * Permet de récupérer le message d'erreur correspondant au validateur.
     * @return
     *         String : le message d'erreur
     */
    public abstract String getMessage();
} 

Pour les intéressés par cette library, elle est déjà disponible sur mon Github en suivant ce lien.

Validateur de dates

Certains d’entre vous ont voulu à plusieurs reprises faire un formulaire avec différents champs de Dates. L’une devant être inférieure à l’autre comme une date d’emménagement et de déménagement.

Bien évidement, le framework Zend a pensé à tout ceci avec le composant Zend_Date mais n’a pas pensé aux formulaires. Il n’y a pas de validateur connu (pour le moment) servant à ceci.

C’est pourquoi, dans le but d’en avoir un sous la main et aussi car j’en avais surtout besoin, je créai un validateur de dates. Il me permet de différencier deux champs contenant une date (de préférence des datepickers jQuery ou Dojo) et dire si oui ou non la date 1 est plus ancienne que la date 2.

Voici d’ailleurs le code du validateur:
/**
* App_Validate_Date
*
* Classe servant à faire la différene entre 2 dates
*
* Retournera True si valide
* False si faux
*
*/
class App_Validate_Date extends Zend_Validate_Abstract
{
const FALSEDATE = "falseDate";
const ILLEGALDIFF = "illegalDiff";

protected $_messageTemplates = array(
self::FALSEDATE =>
"False Date: L'une des dates est invalide",
self::ILLEGALDIFF =>
"ILLEGAL DIFF: La date d'emmenagement est plus récente que la date de déménagement"
);

/**
* la date de départ
*
* @var unknown_type
*/
protected $_date;

/**
* sert à instancier le validateur
*
* @param unknown_type $date
*/
public function __construct($date)
{
$this->setdate($date);
}

/**
* @return unknown_type
*/
public function getdate()
{
return $this->_date;
}

/**
* Setteur = initialiser la variable avec celle passée en paramètre
* @param unknown_type $_date
*/
public function setdate($_date)
{
$this->_date = $_date;
}

public function isValid($value)
{
$this->_setValue($value); //à laisser obligatoirement

if(Zend_Date::isDate($value, 'dd/mm/yy', 'fr_FR') && Zend_Date::isDate($this->_date, 'dd/mm/yy', 'fr_FR'))
{
$datevalue = new Zend_Date($value, 'fr_FR'); //on instancie une date de la valeur
$datedate = new Zend_Date($this->_date, 'fr_FR'); //on instancie la date

$testdate = $datedate->sub($datevalue);

if($testdate < 0) { return true; } else { $this->_error(self::ILLEGALDIFF);
return false;
}
}
else
{
$this->_error(self::FALSEDATE);
return false;
}

}

}
Pour l’utiliser, je n’ai pu le faire que du côté contrôleur. Il faut bien récupérer les deux valeurs après avoir posté le forum. Et voici donc les étapes à effectuer pour que cela marche.
if($this->_request->isPost())
{
$formdata = $this->_request->getPost();

$validator = new Zend_Validate(); //créer un validateur vide
$validator->addValidator(new Zend_Validate_Date('dd/mm/yy', 'fr_FR')); //ajout du validateur de verif date en 1°
$validator->addValidator(new App_Validate_Date($this->_request->getPost('date_debut'))); //ajoute le validateur de diff date en second

$form->date_fin->addValidator($validator); //ajoute la chaine de validateur afin de tous les verifier

if($form->isValid($formdata)) // ce isvalid appelle le isvalide du formulaire pour exécuter à la chaine tous les validateurs
{
//suite du traitement du formulaire
}
}

J’espère que ce validateur vous aidera dans vos projets. Si vous comptez l’améliorer, prévenez moi en m’envoyant les améliorations apportées.