Introducción.
Después de poblado el modelo con la información proporcionada por el usuario a través del formulario, la validación verifica que la información del modelo sea correcta mediante la aplicación de un conjunto de reglas definidas específicamente para cada modelo.
Especificación de reglas.
- Para especificar las reglas de validación de un modelo es necesario sobreescribir el método rules().
public function rules() { return array( array('value1, value2, operator', 'required'), array('value1, value2', 'numerical') ); }
- El método rules() retorna un arreglo cuyos elementos corresponden con la siguiente especificación.
array('<lista de atributos>', '<validador>', 'on' => '<lista de escenarios>', ... <opciones adicionales>)
- El listado de atributos corresponde con los nombres separados por comas de los atributos a los cuales se les aplica la regla de valildación.
- El nombre del validador determina el tipo de verificación que se debe realizar sobre los atributos.
- El parámetro on (opcional) permite especificar en cuales escenarios (lista separada por comas) aplica la regla.
- Las opciones adicionales son parejas nombre/valor que permiten asignar valores iniciales a las propiedades del validador.
Tipos de validadores.
Existen tres tipos de formas como es posible especificar las reglas de validación.
- Como un método del modelo.
- La firma del método deberá corresponder con la siguiente.
/** * @param string El nombre del atributo que será validado. * @param array Opciones adicionales especificadas en la regla de validación. */ public function NombreValidador($atributo, $parametros)
- Como una clase que hereda de CValidator.
- Como un alias de un validador predefinido.
Validadores predefinidos.
Corresponden a alias mas cortos y sencillos de los validadores mas utilizados sobre los atributos.
Alias | Clase | Descripción |
captcha | CCaptchaValidator | Debe ser igual al código de verificación mostrado en el CAPTCHA. |
compare | CCompareValidator | Es igual a otro o a una constante. |
CEmailValidator | Es una dirección de correo electrónico válida. | |
default | CDefaultValueValidator | Asigna un valor por defecto. |
exist | CExistsValidator | Existe en una columna específica de la tabla. |
file | CFileValidator | Contiene el nombre de un archivo subido al servidor. |
filter | CFilterValidator | Transforma al atributo con el filtro. |
in | CRangeValidator | Pertenece a una lista predefinida de valores. |
length | CStringValidator | Su longitud se encuentra dentro de cierto rango específico. |
match | CRegularExpressionValidator | Coincide con la expresión regular especificada. |
numerical | CNumberValidator | Es un valor numérico. |
required | CRequiredValidator | No permite valores vacíos. |
type | CTypeValidator | Verifica que sea del tipo especificado. |
unique | CUniqueValidator | Es único en la columna de la tabla en la base de datos. |
url | CUrlValidator | Es una URL válida. |
A continuación se muestras algunos ejemplos de estos validadores.
/* Se requiere un valor Username, no puede dejarse vacío */ array('username', 'required'), /* Username deberá tener entre 3 y 12 carácteres */ array('username', 'length', 'min' => 3, 'max' => 12), /* En el escenario 'registro', password deberá coincidir con password2 */ array('password', 'compare', 'compareAttribute' => 'password2', 'on' => 'registro'), /* En el escenario 'login', password deberá ser autenticado (validador de método [1] o de clase [2]) */ array('password', 'authenticate', 'on' => 'login')
Ejecución de la validación.
- Es posible forzar a la validación manualmente mediante el llamado al método CModel::validate(). El llamado a métodos como CActiveRecord::save() lanzan automáticamente la validación.
- El retorno del método CModel::validate() se utiliza para verificar si la validación fue exitosa o si falló alguna de las reglas.
- Es posible (opcional) definir un escenario para la ejecución de la validación. En caso de especificarse se tomarán en cuenta las reglas que NO tienen definido un escenario (parámetro on) y aquellas cuyo escenario coincida con el definido para la ejecución de la validación. En caso de no especificarse un escenario, se tomarán en cuenta únicamente las primeras reglas, las que NO tienen definido un escenario.
$modelo -> scenario = 'registro'; if($modelo -> validate()) { // Éxito en la validación } else { // Fracaso en la validación }
- Es posible obtener mayor información del validador mediante los siguientes métodos que pueden ser aplicados globalmente para todos los atributos o a uno en específico.
- CModel::hasErrors(). Verifica si hubo o no errores en la validación.
- CModel::getErrors(). Obtiene los mensajes de error generados durante la validación.
Enlaces.
- Yii Web Programming Framework.
http://www.yiiframework.com/ - Yii Documentation.
http://www.yiiframework.com/doc/
One Reply to “Modelos de formularios con Yii (validación)”