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' ) );