CakePHP permite validar los valores que se introducen en los campos. Para ello tenemos que definirlos en el modelo. Por ejemplo:
public $validate = array(
'login' => 'alphaNumeric',
'email' => 'email',
'born' => 'date'
);
Aquí estamos indicando que ‘login’ debe ser alfanumérico, ’email’ de tipo mail y ‘born’ de tipo fecha.
Cada campo puede tener más de una regla, y estas puede ser complejas, incluyendo el mensaje que tenemos que mostrar:
public $validate = array(
'login' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Sólo letras y números'
),
'between' => array(
'rule' => array('lengthBetween', 5, 15),
'message' => 'Entre 5 y 15 caracteres'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'Mínimo ocho caracteres de longitud'
),
'email' => 'email',
'born' => array(
'rule' => 'date',
'message' => 'Debe ser una fecha',
'allowEmpty' => true
)
);
Diferentes valores y su explicación:
'rule' => array('notBlank'), //La regla que vamos a aplicar (ver más adelante)
//'message' => 'Para poner mensaje personalizado',
//'allowEmpty' => false, //Permitir valor en blanco
//'required' => false, //Requerido sí o no
//'last' => false, // Parar validación despues de esta regla
//'on' => 'create', // Limitar validación a 'create' o 'update'
Aquí está la lista de las diferentes validaciones.
public $validate = array(
'login' => array(
'rule' => 'alphaNumeric',
'message' => 'Sólo letras y números'
)
);
public $validate = array(
'password' => array(
'rule' => array('lengthBetween', 5, 15),
'message' => 'Longitud entre 5 y 15'
)
);
public $validate = array(
'myCheckbox' => array(
'rule' => array('boolean'),
'message' => 'Valores booleanos (0 o 1)'
)
);
public $validate = array(
'ccnumber' => array(
'rule' => array('cc', array('visa', 'maestro'), false, null),
'message' => 'Tarjeta de crédito, en este caso visa o maestro.'
)
);
public $validate = array(
'age' => array(
'rule' => array('comparison', '>=', 18),
'message' => 'El valor tiene que ser mayor o igual que 18.'
)
);
public $validate = array(
'age' => array(
'rule' => array('comparison', 'greater or equal', 18),
'message' => 'Igual que antes. Valores permitidos: “is greater”, “is less”, “greater or equal”, “less or equal”, “equal to”, and “not equal”.'
)
);
public $validate = array(
'born' => array(
'rule' => array('date', 'ymd'),
'message' => 'Fecha en formato YY-MM-DD',
'allowEmpty' => true
)
);
/****
Los separadores pueden ser espacios, puntos, guiones o barras
‘dmy’ e.g. 27-12-2006 or 27-12-06
‘mdy’ e.g. 12-27-2006 or 12-27-06
‘ymd’ e.g. 2006-12-27 or 06-12-27
‘dMy’ e.g. 27 December 2006 or 27 Dec 2006
‘Mdy’ e.g. December 27, 2006 or Dec 27, 2006 (coma opcional)
‘My’ e.g. (December 2006 or Dec 2006)
‘my’ e.g. 12/2006 or 12/06
‘ym’ e.g. 2006/12 or 06/12
‘y’ e.g. 2006
***/
public $validate = array(
'price' => array(
'rule' => array('decimal', 2) //Dos números decimales
)
);
public $validate = array(
'email' => array(
'rule' => array('email', true),
'message' => 'Email válido, incluyendo host válido (true)'
)
);
public $validate = array(
'food' => array(
'rule' => array('equalTo', 'cake'),
'message' => 'Igual a cake'
)
);
public $validate = array(
'image' => array(
'rule' => array('fileSize', '<=', '1MB'),
'message' => 'El tamaño tiene que ser menor que 1Mb'
)
);
public $validate = array(
'function' => array(
'allowedChoice' => array(
'rule' => array('inList', array('Foo', 'Bar')),
'message' => 'El valor tiene que estar en la lista'
)
)
);
public $validate = array(
'clientip' => array(
'rule' => array('ip', 'IPv4'), // or 'IPv6' or 'both' (default)
'message' => 'Tiene que ser una IP.'
)
);
public $validate = array(
'login' => array(
'rule' => 'isUnique',
'message' => 'Valor único en la base de datos.'
)
);
public $validate = array(
'login' => array(
'rule' => array('maxLength', 15),
'message' => 'La cadena no puede tener más de 15 caracteres.'
)
);
public $validate = array(
'login' => array(
'rule' => array('minLength', 8),
'message' => 'Cadena mínimo 8 caracteres.'
)
);
public $validate = array(
'salary' => array(
'rule' => array('money', 'left'),
'message' => 'Indicador de moneda.'
)
);
public $validate = array(
'cars' => array(
'rule' => 'numeric',
'message' => 'El valor debe ser numérico.'
)
);
public $validate = array(
'wheels' => array(
'rule' => 'naturalNumber',
'message' => 'Número natural sin incluir el 0.'
),
'airbags' => array(
'rule' => array('naturalNumber', true),
'message' => 'Número natural incluyendo el 0.'
),
);
public $validate = array(
'number' => array(
'rule' => array('range', -1, 11),
'message' => 'Valor numérico en un rango'
)
);
public $validate = array(
'website' => array(
'rule' => 'url' //Comprueba que sea una url válida
)
);
public $validate = array(
'login' => array(
'rule' => '/^[a-z0-9]{3,}$/i',
'message' => 'Expresión regular, en este caso que empieza por tres caracteres alfanuméricos'
)
);