Ver índice de contenidos del libro

2.5. Validadores lógicos

Un único campo puede definir varios validadores utilizando los validadores lógicos:

  • sfValidatorAnd: para ser válido, el campo debe pasar todos los validadores
  • sfValidatorOr: para ser válido, el campo debe pasar al menos un validador

Los constructores de los validadores lógicos aceptan como primer argumento una lista de validadores. El listado 2-11 emplea sfValidatorAnd para establecer dos validadores obligatorios en el campo nombre.

Listado 2-11 - Empleando el validador sfValidatorAnd

class ContactoForm extends sfForm
{
 public function configure()
 {
    // ...
 
    $this->setValidators(array(
      // ...
      'nombre' => new sfValidatorAnd(array(
        new sfValidatorString(array('min_length' => 5)),
        new sfValidatorRegex(array('pattern' => '/[\w- ]+/')),
      )),
    ));
  }
}

Cuando se envía el formulario, el valor del campo nombre debe tener al menos cinco caracteres y debe cumplir con la expresión regular [\w- ]+

Como los validadores lógicos también son validadores, se pueden combinar para crear validaciones tan complejas como las mostradas en el listado 2-12.

Listado 2-12 - Combinando varios validadores lógicos

class ContactoForm extends sfForm
{
 public function configure()
 {
    // ...
 
    $this->setValidators(array(
      // ...
      'nombre' => new sfValidatorOr(array(
        new sfValidatorAnd(array(
          new sfValidatorString(array('min_length' => 5)),
          new sfValidatorRegex(array('pattern' => '/[\w- ]+/')),
        )),
        new sfValidatorEmail(),
      )),
    ));
  }
}