Formidable est une bibliothèque PHP de gestion de formulaire un peu spéciale. Contrairement à l’approche habituelle, qui vous fait utiliser une API PHP pour spécifier et construire votre formulaire puis vous propose de l’utiliser pour faire un rendu, Formidable se base sur du code HTML, puis l’analyse pour construire une représentation manipulable du formulaire et ensuite l’afficher. Par exemple:

$form = new Gregwar\Formidable\Form('<form method="post">'
 .'What\'s your name? <input type="text" name="nom" />'
 .'<input type="submit" />'
 .'</form>');

$form->setValue('nom', 'Jack');

echo $form;

Ce bout de code construira un formulaire et en conservera une représentation intermédiaire, et il sera par exemple ici possible à l’aide de setValue() de définir la valeur d’un champ. Le echo $form affichera le formulaire, ce qui donnera quelque chose du genre:

<form method="post">What's your name?
<input type="text" name="nom" value="Jack" />

<input type="submit" />
<input type="hidden" name="csrf_token"
       value="9c14019138010ddee6766caaad8f2926b5b09fc7" /></form>

Comme vous le remarquez:

  • Le champ est requis par défaut, l’attribut required a été ajouté automatiquement
  • L’attribut value a été rempli par « Jack »
  • Un jeton CSRF a été automatiquement injecté dans le formulaire

Ce système permet alors de manipuler un formulaire d’une nouvelle manière, qui vous permettra de créer facilement des formulaires, et de les personnaliser à volonté.

Un autre exemple:

$form = new Gregwar\Formidable\Form('<form method="post">'
 .'How old are you? <input type="int" name="age" />'
 .'</form>');

echo $form;

Notez que le type int n’est pas valide et que les attributs min et max n’existent pas non plus en HTML. Ils seront utilisés pour générer une contrainte d’intégrité sur le champ et ne seront pas affichés, on obtiendra simplement un formulaire de la forme:

<form method="post">How old are you? <input type="text" name="age" />
<input type="hidden" name="csrf_token"
       value="fa88b988041aa1497b4200996c246c5f75d22e4c" /></form>

Et il sera possible de gérer la réception du formulaire comme cela:

$form->handle(function($values) {
    echo 'You are '.$values['age'].' years old!';
}, function($errors) {
    echo 'Errors:<br/>';
    foreach ($errors as $error) {
        echo "* $error <br/>";
    }
});

De cette manière, le formulaire vérifiera que l’ensemble de ses contraintes sont respectées, y compris le jeton csrf et appellera alors l’une des deux fonctions fournies en paramètre de handle().

La bibliothèque est sous licence MIT et vous propose aussi d’autre fonctionnalités, comme la possibilité d’alimenter des select ou des radios depuis du code, de placer des contraintes personnalisées, de récupérer les données ou de peupler les données depuis un objet mappé… Pour plus d’informations, n’hésitez pas à consulter le README de Gregwar/Formidable