Validación en CakePHP 1.2 (II)

Continuando con el post Validación en CakePHP 1.2, explicaremos en esta ocasión cómo validar formatos de campos permitiendo que estén vacíos y cómo realizar una validación personalizada, introduciendo manualmente el código de validación.

Validaciones con campos vacíos

Hasta hoy, no habíamos encontrado la forma de validar formatos de campos, permitiendo que se encuentren vacíos, directamente en el modelo. Lo que hacíamos era hacer este tipo de comprobaciones manualmente, rompiendo un poco la flexibilidad que nos ofrece CakePHP para hacer las validaciones directamente en el modelo y sin volver a preocuparnos de ellas.

Ahora ya descubrimos la manera de hacerlo. Es una cosa muy simple que habíamos pasado por alto. Simplemente tenemos que pasar un parámetro a la función de validación, de la manera siguiente:

var $validate = array(
   'email' => array(
   'valid' => array( 'rule' => array('email'),
                             'allowEmpty' => true,
                             'message' => 'Formato email inválido')
                             )
              );

Validación a medida

En el modelo introduciremos el siguiente código:

var $validate = array(
    'campo' => array(
                  'valid' => array( 'rule' => 'reglaPropia',
                              'param1'=>'valor',
                              'message' => 'Mensaje de salida')
                              )
                    );

function reglaPropia($value, $params)
{
   $valid = false;
   if (!condicion){
      // Asignamos el valor a $valid en función de la condición que queramos establecer
   }
   return $valid;
}

A la función creada le hemos pasado dos argumentos, aunque el segundo podríamos no ponerlo si no es necesario. Ambos serán arrays, de manera que si queremos acceder al valor del campo a validar tendremos que leer $value['campo'] y para acceder a los parámetros $params['param1'] , pudiendo introducir tantos parámetros como sea necesario.

En esta función podemos utilizar también las funciones de validación de CakePHP. Por ejemplo:

$valid = Validation::custom($value['campo'], $params['param1']);

Escribir una respuesta