Validar campos en cakePHP

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