Snippets tagged "strings forms blacklist" Snippets tagged "strings forms blacklist"

[Symfony] [Validator] Valider une valeur en fonction d'une blacklist

Pour s'assurer qu'une valeur saisie par un utilisateur dans un formulaire Symfony ne fait pas partie d'une liste de valeurs interdites, on peut utiliser le validateur suivant :

Fichier sfBlacklistValidator.class.php :

<?php
class sfBlacklistValidator extends sfValidator
{
 
  public function initialize($context, $parameters = null)
  {
    // initialize parent
    parent::initialize($context);
 
    // set defaults
    $this->getParameterHolder()->set('blacklist_error', 'Value is not an allowed one');
    $this->getParameterHolder()->set('case_sensitive', false);
    $this->getParameterHolder()->set('trim', true);
    $this->getParameterHolder()->add($parameters);
    return true;
  }
 
  public function execute(&$value, &$error)
  {
    // Forbidden names
    $blacklist = $this->getParameter('blacklist');
    $casesensitive = $this->getParameter('case_sensitive');
    $trim = $this->getParameter('trim');
 
    if ($trim)
    {
      $value = trim($value);
    }
 
    if (is_array($blacklist) && count($blacklist) > 0)
    {
      if ($casesensitive)
      {
        $match = in_array($value, $blacklist);
      }
      else
      {
        $match = false;
        foreach ($blacklist as $item)
        {
          if (is_string($item) && strtolower($item) == strtolower($value))
          {
            $match = true;
            break;
          }
        }
      }
      if ($match)
      {
        $error = $this->getParameterHolder()->get('blacklist_error');
        return false;
      }
    }
 
    return true;
  }
 
}

Dans un fichier de validation yml:

fields:
  myfield:
    sfBlacklistValidator:
      blacklist:       [admin, contact, info, infos, commercial, tech, support, sales, partnership, webmaster, business, owner]
      case_sensitive:  no
      trim:            yes
      blacklist_error: The username you requested is not available

Les options sont assez explicites, mais en voici tout de même le détail :

  • blacklist: tableau de valeurs prohibées au format YAML
  • case_sensitive: effectuer les comparaisons en tenant compte de la casse
  • trim: inclure les espaces en début et fin de chaînes
  • blacklist_error: Message d'erreur à afficher en cas de valeur blacklistée
by Nicolas Perriault on 2008-01-13, tagged blacklist  forms  strings  symfony  validation