Un único campo puede definir varios validadores utilizando los validadores lógicos:
sfValidatorAnd
: para ser válido, el campo debe pasar todos los validadoressfValidatorOr
: 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(),
)),
));
}
}