Améliorer la validation des formulaires côté client avec FuelPHP
required
aux champs signalés comme obligatoires en ce qui concerne la validation côté serveur. En revanche, celle-ci comporte d'autres règles (maxlength
, pattern
avec une expression régulière...) possédant des équivalents côté client qui, pour leur part, ne sont pas répliqués. Voyons comment changer cela !Le code concerné se trouve dans la méthode
add_rule
de la classe Field
, située dans le fichier fuel/core/classes/fieldset/field.php
, il suffit donc d'étendre cette classe côté application en réécrivant ladite méthode. Pour ce faire, créez le fichier fuel/app/classes/fieldset/field.php
et éditez-le ainsi :<?php
class Fieldset_Field extends Fuel\Core\Fieldset_Field
{
public function add_rule($callback)
{
$args = array_slice(func_get_args(), 1);
$this->rules[] = array($callback, $args);
switch ($callback) {
case 'required':
$this->set_attribute('required', 'required');
break;
case 'max_length':
$this->set_attribute('maxlength', $args[0]);
break;
case 'match_pattern':
$this->set_attribute('pattern', $args[0])->set_attribute('title', $args[0]);
break;
case 'min_length':
if ($this->get_attribute('pattern') === null) {
$this->set_attribute('pattern', '.{'.$args[0].',}');
}
break;
}
return $this;
}
}
Nous venons donc de remplacer le simple test sur l'attribut
required
présent à l'origine par une structure switch
testant les différentes règles de validation gérées par FuelPHP que nous voulons implémenter côté client.Nous allons également en profiter pour modifier la méthode utilisée par la règle
match_pattern
: les expressions régulières devant être entourées d'un délimiteur en PHP mais pas dans le code HTML, ajoutons ce délimiteur directement avec ladite méthode, qui se trouve dans la classe Validation
du fichier fuel/core/classes/validation.php
(à étendre tout comme la précédente) :<?php
class Validation extends Fuel\Core\Validation
{
public function _validation_match_pattern($val, $pattern)
{
return $this->_empty($val) || preg_match('~'.$pattern.'~', $val) > 0;
}
}
Pour terminer, il suffit de déclarer l'extension à FuelPHP via le fichier
fuel/app/bootstrap.php
: je vous invite à vous référer au précédent article, dont la fin décrit une démarche identique.Vous obtenez ainsi une validation plus riche côté client ! D'autres règles de validation de FuelPHP sont évidemment implémentables de la même façon, n'hésitez pas à partager votre code le cas échéant.