Modelos de formularios con Yii (validación)

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.

  1. 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)
  1. Como una clase que hereda de CValidator.
  2. 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.
email 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.

One thought on “Modelos de formularios con Yii (validación)”

Leave a Reply

Your email address will not be published. Required fields are marked *