13.6.1. sfValidatorAnd
sfValidatorAnd
considera válido el valor original solamente si pasa correctamente una lista de validadores.
El constructor de sfValidatorAnd
toma como primer argumento una lista de validadores:
$v = new sfValidatorAnd(
array(
new sfValidatorString(array('max' => 255)),
new sfValidatorEmail(),
),
array('halt_on_error' => true),
array('invalid' => 'El valor indicado debe ser un email de menos de 255 caracteres de longitud.')
);
Por defecto el validador guarda en un array todos los mensajes de error lanzados por los validadores incluidos. También puede mostrar un único mensaje de error si se indica una cadena de texto para el error de tipo invalid
, tal y como se muestra en el ejemplo anterior.
Opción | Error | Descripción |
---|---|---|
halt_on_error |
- | Indica si la validación se debe detener después del primer error o si debe continuar (por defecto vale false ) |
El orden de los validadores es muy importante cuando se establece a true
la opción halt_on_error
.
La lista de validadores incluidos también se puede gestionar con los métodos getValidators()
y addValidator()
.
13.6.2. sfValidatorOr
sfValidatorOr
considera válido el valor original si pasa correctamente al menos uno de los validadores indicados.
El constructor de sfValidatorOr
toma como primer argumento una lista de validadores:
$v = new sfValidatorOr(
array(
new sfValidatorRegex(array('pattern' => '/\.com$/')),
new sfValidatorEmail(),
),
array(),
array('invalid' => 'El valor indicado debe ser o un dominio .com o una dirección de email.')
);
Por defecto el validador guarda en un array todos los mensajes de error lanzados por los validadores incluidos. También puede mostrar un único mensaje de error si se indica una cadena de texto para el error de tipo invalid
, tal y como se muestra en el ejemplo anterior.
La lista de validadores incluidos también se puede gestionar con los métodos getValidators()
y addValidator()
.
13.6.3. sfValidatorSchema
Schema validator: Yes
sfValidatorSchema
consiste en un validador compuesto por varios campos. Cada campo se forma mediante un nombre y un validador:
$v = new sfValidatorSchema(array(
'nombre' => new sfValidatorString(),
'pais' => new sfValidatorI18nChoiceCountry(),
));
Nota Los formularios se definen mediante un esquema de validadores de la clase sfValidatorSchema
.
Este validador sólo acepta como argumento un array, por lo que lanza una excepción de tipo InvalidArgumentException
en cualquier otro caso.
Además, a este tipo de validador también se le puede asignar un pre-validador (que se ejecuta antes que cualquier otro validador) y un post-validador (que se ejecuta sobre los valores limpios después de todos los demás validadores).
Tanto el pre-validador como el post-validador, son esquemas de validadores a los que se les pasan todos los valores. Para establecer este tipo de validadores, se emplean los métodos setPreValidator()
y setPostValidator()
:
$v->setPostValidator(
new sfValidatorCompare('password1', '==', 'password2')
);
Opción | Error | Descripción |
---|---|---|
allow_extra_fields |
extra_fields |
Si vale false , el validador muestra un error cuando el usuario envía más campos que los que tenía el formulario original (por defecto vale false ) |
filter_extra_fields |
- | Si vale true , el validador elimina los campos adicionales del array de valores limpios (por defecto vale true ) |
Error | Variables | Valor por defecto (se muestra en inglés) |
---|---|---|
extra_fields |
%field% |
Unexpected extra form field named "%field%". |
post_max_size |
The form submission cannot be processed. It probably means that you have uploaded a file that is too big. |
sfValidatorSchema
permite acceder a sus validadores utilizando la notación de los arrays:
$vs = new sfValidatorSchema(array('nombre' => new sfValidatorString()));
$validadorNombre = $vs['nombre'];
unset($vs['nombre']);
La notación de los arrays también se puede emplear para acceder a los esquemas de validadores anidados:
$vs['autor']['nombre']->setMessage('invalid', 'El nombre no es válido.');
Si el tamaño de los datos enviados en el formulario excede del valor de la opción post_max_size
del archivo de configuración php.ini
, se lanza un error de tipo post_max_size
.
13.6.4. sfValidatorSchemaCompare
sfValidatorSchemaCompare
permite comparar dos de los valores incluidos en el array de valores originales:
$v = new sfValidatorCompare('password1', '==', 'password2');
Opción | Error | Descripción |
---|---|---|
left_field |
- | El nombre del primer campo que se compara |
operator |
- | El operador utilizado en la comparación |
right_field |
- | El nombre del segundo campo que se compara |
throw_global_error |
- | Indica si se lanza un error global (por defecto vale false ) o si se lanza un error asociado con el primer campo que se compara |
Los operadores disponibles para realizar comparaciones son los siguientes:
sfValidatorSchemaCompare::EQUAL
o también==
sfValidatorSchemaCompare::NOT_EQUAL
o también!=
sfValidatorSchemaCompare::LESS_THAN
o también<
sfValidatorSchemaCompare::LESS_THAN_EQUAL
o también<=
sfValidatorSchemaCompare::GREATER_THAN
o también>
sfValidatorSchemaCompare::GREATER_THAN_EQUAL
o también>=
Por defecto, el validador lanza un error de tipo global. Sin embargo, si la opción throw_global_error
vale true
, se lanza un error relacionado con el primer campo comparado.
El mensaje del error de tipo invalid
puede utilizar las siguientes variables: %left_field%
, %right_field%
y %operator%
.
13.6.5. sfValidatorSchemaFilter
sfValidatorSchemaFilter
convierte un validador normal en un esquema de validadores. En ocasiones es útil en el post-validador:
$v = new sfValidatorSchema();
$v->setPostValidator(
new sfValidatorSchemaFilter('email', new sfValidatorEmail())
);