PHPackages                             jemdev/form - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. jemdev/form

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

jemdev/form
===========

Package de gestion de formulaires

2.0.001(10y ago)0902CeCILL-2.0PHPPHP &gt;=5.4.0

Since Nov 2Pushed 1y ago1 watchersCompare

[ Source](https://github.com/jemdev/form)[ Packagist](https://packagist.org/packages/jemdev/form)[ Docs](http://jem-web.info/)[ RSS](/packages/jemdev-form/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)DependenciesVersions (3)Used By (0)

À partir de l'objet jemdev\\form\\form, on appelle simplement la méthode correspondant au type de champs qu'on souhaite créer. Par exemple, pour un champ de type *textarea* :

```
/* Création d'un champ de saisie */
$zone_texte = $oForm->textarea('id_zone_texte');
```

On peut cependant ajouter des attributs à ce champ, nous verrons ce point un peu plus loin. Voyons d'abord la liste des champs qu'on peut créer.

#### champs communs à tous les DOCTYPES

[](#champs-communs-à-tous-les-doctypes)

- hidden
- select
- textarea
- groupe
- text
- radio
- checkbox
- submit
- reset
- file
- image
- button

#### champs propre à HTML5

[](#champs-propre-à-html5)

- datalist
- color
- date
- email
- number
- range
- search
- tel
- time
- url

Notez l'absence du champ *input* : c'est voulu pour des raisons de simplification. On peut en revanche observer la présence de champs qui correspondent aux types possible d'un champ *input* : *hidden*, *text*, *radio*, etc... Quel que soit le champ que l'on souhaite créer, la méthode est la même que montrée plus haut avec un *textarea*.

### Les méthodes sur les objets créés à partir de jemdev\\form\\form

[](#les-méthodes-sur-les-objets-créés-à-partir-de-jemdevformform)

Lorsqu'on crée un champ, la méthode retourne un objet comportant des méthodes qui deviennent utilisables pour compléter certaines propriétés de ce champ.

#### méthodes communes pour tous les champs

[](#méthodes-communes-pour-tous-les-champs)

- setLabel($label) : Permet d'indiquer le texte d'un label qui sera rattaché au champ. Notez cependant que la balise *label* ne sera pas créée, seule la propriété du champ sera stockée et disponible.
- setAttribute($attr \[, $value\]) : Pour ajouter un attribut à un champ donné, on appelle simplement la méthode en indiquant en paramètre le nom de l'attribut et la valeur à y assigner. Notez que la valeur est optionnelle. Reprenons l'exemple montré plus haut :

```
$zone_texte->setAttribute('cols', 50);
$zone_texte->setAttribute('rows', 10);
```

Le résultat correspondra alors à la balise html suivante :

```

```

L'exemple utilisé ici permet de souligner un cas particulier : cette balise ne comporte pas d'attribut *value*, la valeur étant affichée entre les deux balises. Cependant, il est possible d'indiquer le contenu de cette zone de saisie de la même manière que pour n'importe quel autre champ :

```
$zone_texte->setAttribute('value', "Contenu de la zone de saisie");
```

Avec le résultat suivant :

```
Contenu de la zone de saisie
```

Alors qu'avec un champ *input* de type *text*, le résultat sera conforme à ce qui est attendu :

```
/* Création d'un champ de saisie */
$zone_texte = $oForm->text('id_zone_texte');
$zone_texte->setAttribute('value', "Contenu de la zone de saisie");
```

Résultat :

```

```

- setRule($rule, $msg\[, $val\]) : On peut indiquer des règles de validation. Deux paramètres sont obligatoires, le nom de la règle, et le message à afficher si la règle n'est pas respectée. En option, certaines règles requièrent un troisième paramètre qui sera généralement une valeur de contrôle. Une liste des règles de validation pré-existantes sera indiquée plus loin, ainsi que la manière d'ajouter des règles personnalisées.

#### méthodes propres à chaque objet

[](#méthodes-propres-à-chaque-objet)

- select
    - addOption
    - addGroup
- textarea
- datalist
    - addOption

### Les règles de validation

[](#les-règles-de-validation)

Il existe déjà des règles génériques disponibles pour valider les données d'un formulaire :

- *required* :
    - Vérifie qu'une valeur requise n'est pas vide.
    - Utilisation : `$objet->setRule('required', "message");`
- *email* :
    - Vérifie la validité d'une adresse de courrier électronique.
    - Utilisation : `$objet->setRule('email', "message");`
- *url* :
    - Vérifie la validité de la syntaxe d'une URL
    - Utilisation : `$objet->setRule('url', "message");`
- *alpha* :
    - Vérifie la validité de la syntaxe d'une chaîne alphabétique. N'accepte que des caractères alphabétiques qui peuvent être accentués.
    - Utilisation : `$objet->setRule('alpha', "message");`
- *word* :
    - Vérifie la validité de la syntaxe d'un ou plusieurs mots. Accepte des caractères alphabétiques plus guillemets, apostrophes, tirets et espaces.
    - Utilisation : `$objet->setRule('word', "message");`
- *alnum* :
    - Vérifie la validité de la syntaxe d'une chaîne alphanumérique, accepte des mots et des chiffres ainsi que des caractères de ponctuation.
    - Utilisation : `$objet->setRule('alnum', "message");`
- *num* :
    - Vérifie la validité de la syntaxe d'une chaîne de chiffres, n'accepte que des chiffres.
    - Utilisation : `$objet->setRule('num', "message");`
- *float* :
    - Vérifie la validité de la syntaxe d'un nombre flottant. Accepte des chiffres avec ou sans décimales et une séparation sous la forme d'un point ou d'une virgule.
    - Utilisation : `$objet->setRule('float', "message");`
- *minlength* :
    - Vérifie que la chaîne comporte au moins un certain nombre de caractères. On doit indiquer en troisième paramètre un entier correspondant au nombre minimum de caractères attendus.
    - Utilisation : `$objet->setRule('minlength', "message", 10);`
- *maxlength* :
    - Vérifie que la chaîne comporte au maximum un certain nombre de caractères. On doit indiquer en troisième paramètre un entier correspondant au nombre maximum de caractères attendus.
    - Utilisation : ` $objet->setRule('maxlength', "message", 50);`
- *rangelength* :
    - Vérifie que la chaine comporte un nombre de caractères compris entre un minimum et un maximum donné. On doit indiquer en troisième paramètre tableau avec deux entiers correspondant au nombres minimum et maximum de caractères attendus.
    - Utilisation : `$objet->setRule('rangelength', "message", array(10, 50));`
- *minval* :
    - Vérifie que la valeur est supérieure ou égale à une valeur minimum. On doit indiquer en troisième paramètre un entier ou flottant correspondant au nombre minimum attendu : cette règle pourra avantageusement être utilisée en parallèle avec la règle *num* ou *float*.
    - Utilisation : `$objet->setRule('minval', "message", 1);`
- *maxval* :
    - Vérifie que la valeur est inférieure ou égale à une valeur maximum. On doit indiquer en troisième paramètre un entier ou flottant correspondant au nombre maximum attendu : cette règle pourra avantageusement être utilisée en parallèle avec la règle *num* ou *float*.
    - Utilisation : `$objet->setRule('maxval', "message", 12);`
- *rangeval* :
    - Vérifie que la valeur est comprise entre une valeur maximum et une valeur minimum. On doit indiquer en troisième paramètre un tableau de deux entiers ou flottants correspondant aux limites minimum et maximum attendu : cette règle pourra avantageusement être utilisée en parallèle avec la règle *num* ou *float*.
    - Utilisation : `$objet->setRule('rangeval', "message", array(1, 12));`
- *inferieur* :
    - Vérifie que la valeur est strictement inférieure à une valeur maximum. On indique en troisième paramètre la valeur à laquelle le nombre saisi doit être strictement inférieur. Cette règle pourra être utilisée en parallèle avec la règle *num* ou *float*.
    - Utilisation : `$objet->setRule('inferieur', "message", 100);`
- *superieur* :
    - Vérifie que la valeur est strictement supérieure à une valeur minimum. On indique en troisième paramètre la valeur à laquelle le nombre saisi doit être strictement supérieur. Cette règle pourra être utilisée en parallèle avec la règle *num* ou *float*.
    - Utilisation : `$objet->setRule('superieur', "message", 1);`
- *regex* :
    - Vérifie que la saisie correspond à une expression régulière définie. Règle fort pratique qui dispensera souvent d'écrire d'autres règles spécifiques. Si la saisie doit correspondre à un masque PCRE particulier, on indiquera ce masque en troisième paramètre.
    - Utilisation : `$objet->setRule('regex', "message", "#^[A-Z]{1}[0-9]{4}$#");`
- *formatdateheure* :
    - Validation du format d'une date. On utilisera les mêmes règles de formats de date que pour la fonction PHP native *date()*, voir [la documentation](http://php.net/date "Documentation PHP pour la fonction date").
    - Utilisation : `$objet->setRule('formatdateheure', "message", 'd/m/Y');`
- *validedate* :
    - Validation d'une date à partir d'un format donné. Le format de la date sera vérifié selon le troisième paramètre, mais l'existence de la date elle-même sera vérifié, interdisant par exemple de saisir un 30 février.
    - Utilisation : `$objet->setRule('validedate', "message", 'd/m/Y');`
- *comparer* :
    - Compare deux valeurs et retourne vrai si les deux chaines sont identiques. Utile lors de la création d'un mot de passe avec un champ de confirmation.
    - Utilisation : `$objet->setRule('comparer', "message", $valeur\_de\_controle);`
- *differentDe* :
    - Vérifie que la valeur saisie est différente de l'argument. Par exemple, pour une liste de sélection dont le premier item affiche « Sélectionnez une valeur » et dont l'attribut *value* vaut *« -1 »*, on indique cette valeur comme ne pouvant être sélectionnée. Ça équivaut à rendre un choix obligatoire dans une liste.
    - Utilisation : `$objet->setRule('differentDe', "message", '-1');`

Notez que si un champ n'est pas défini comme requis mais que vous définissez une règles de validation sur le contenu, la validation ne retournera de message d'erreur que si une saisie a été effectuée. Par exemple, un champ où doit être saisie une date ne retournera d'erreur que si une date a été saisie incorrectement, mais la règle sera ignorée si le champ est resté vide et que la règle *required* n'a pas été définie.

#### En résumé :

[](#en-résumé-)

Le principe est simple, la méthode attend les paramètres suivant :

1. le nom de la règle;
2. Le message a afficher le la règle n'est pas respectée;
3. pour certains règles, une valeur de contrôle (*minlength*, *maxlength*, *minval*, *maxval*, *rangeval*, *inferieur*, *superieur*, *regex*, *validedate*, *comparer*, *differentDe*);
4. pour certaines autres règles un seconde valeur de contrôle (*rangelength*, *rangeval*) : dans ce cas, le troisième paramètre sera un tableau indexé contenant les deux valeurs à utiliser comme éléments de contrôle.

### Le chaînage des méthodes

[](#le-chaînage-des-méthodes)

Dès la création d'un objet pour un champ de formulaire donné, on peut chaîner les méthodes et s'affranchir ainsi de la nécessité de ré-écrire la variable pour chaque appel d'une nouvelle méthode.

Exemple :

```
$nom = $oForm->text('nom', 'nom')
             ->setLabel('Nom du client')
             ->setAttribute('class', 'classe_css_quelconque')
             ->setAttribute('value', $infosClient['nom'])
             ->setRule('required', "Le nom du client est requis");
```

### Définir des règles de validation personnalisées.

[](#définir-des-règles-de-validation-personnalisées)

Pour les cas où il ne sera pas possible de définir une expression régulière pour valider un champ donné, il reste possible d'ajouter des méthodes de validation supplémentaires au système de gestion des formulaires. Généralement, ce sera indispensable lorsqu'il s'agira de collecter des informations de contrôle dans une base de données par exemple ou d'une source externe quelconque, ou encore si la donnée considérée doit correspondre à un schéma requérant un calcul de contrôle, par exemple pour vérifier la clé de contrôle d'un numéro de sécurité sociale. Pour ce faire, on définira une classe étendant jemdev\\form\\process\\validation. Pour simplifier, voici un modèle qui pourra vous servir de base :

```
class helpers_validationsupplementaire extends jemdev\form\process\validation
{
    public static $aMethodesSupplementaires = array(
        'autreMethodeValidation'
    );
    /**
     * Constructeur.
     *
     * Crée l'instance parente et valide les données du formulaire.
     *
     */
    public function __construct($aDatas, $oRules, $aExceptionErreurs)
    {
        parent::__construct($aDatas, $oRules, $aExceptionErreurs);
        foreach(self::$aMethodesSupplementaires as $methode)
        {
            self::$methodesValidation[] = $methode;
        }
    }
    public function __get($cle)
    {
        $authorise = array('aMethodesSupplementaires');
        if(in_array($cle, $authorise))
        {
            return $this->${$cle};
        }
    }

    /**
     * Vérifie la validité d'une donnée saisie.
     *
     * @param   mixed     $valeur
     * @return  bool    Retourne TRUE si la valeur est falide, FALSE dans le cas contraire
     */
    public function _autreMethodeValidation($valeur)
    {
        /* Code validant la valeur saisie dans le formulaire et retournant un booléen */
        //... $bValide = false; //
