jueves, 11 de agosto de 2011

Yii Framework: Uso de CDefaultValueValidator en el modelo

Una de las bondades de Yii Framework es la posibilidad de realizar validaciones de los datos de una base de datos, desde el modelo, sobrescribiendo el método rules() de la clase ActiveRecord. En este post os explico como usar estas validaciones para poner un valor por defecto, en un campo de una base de datos.

Escenario

Necesitamos poner un valor por defecto en un campo de la base de datos. Cuando el usuario no rellene el valor del campo en el formulario, a la hora de actualizar o dar de alta un nuevo registro, el ActiveRecord automáticamente debe insertar el valor por defecto en la base de datos.

Descripción de la solución

La solución pasa por poner en el método rules() de nuestra tabla, un validador de tipo CDefaultValueValidator que nos permite especificar un valor por defecto para el campo de manera dinámica. Tiene dos atributos para especificar:
  • setOnEmpty: valor booleano. Si es true entonces el valor predeterminado se establece sólo cuando el valor del atributo es una cadena nula o vacía. En caso de que sea false, se establece siempre. 
  • value: el valor por defecto a establecer.
Cada validador tiene un alias para hacer referencia al validador en el método rules() del ActiveRecord. En nuestro caso el alias de CDefaultValueValidator es 'default'.

Ejemplo: en el siguiente ejemplo hay un campo que se llama 'leido' en el ActiveRecord, el cual queremos que
como valor por defecto sera cero.

public function rules()
{
	return array(
		array('leido','default','value' => 0),
	);
}