===== CActiverecord: Reglas de Validación ====
==== Reglas de Validación ====
En el método rules() del modelo especificaremos todas las reglas de validación de atributos del mismo. Solamente se han de incluir las que correspondan a datos que introduce el usuario, no aquellos que asignamos por programa. También sirve para asignar valores por defecto a los atributos, en el caso de creación de un nuevo modelo:
public function rules()
{
return array(
array('fecha_hora','default','value'=>date('Y-m-d h:i')),
array('aceptado','default','value'=>'1'),
array('autores_id','default','value'=>Yii::app()->user->id),
array('fecha_hora, categorias_id, autores_id,texto', 'required'),
array('categorias_id, autores_id', 'numerical', 'integerOnly'=>true),
// The following rule is used by search().
array('fecha_hora, texto, aceptado, categorias_id, autores_id', 'safe', 'on'=>'search'),
);
}
En [[http://yii.googlecode.com/files/yii-1.1.0-validator-cheatsheet.pdf|este documento]] hay un resumen de las reglas de validación disponibles en Yii.
Podemos crear nuestros propios criterios de validación, creando un método en la clase y utilizándolo en rules, de la forma siguiente:
public function rules()
{
return array(
array('telef1', 'telefono', 'movil'=>true),
);
}
/**
* Validación de teléfono
*/
public function telefono($attribute,$params)
{
if(strlen($this->$attribute)!=9)
$this->addError($attribute, 'No es un teléfono');
// Pendiente...comprobar que son digitos...
if ($params['movil'])
if(substr($this->$attribute,0,1)!='6')
$this->addError($attribute, 'No es un móvil');
}
Mediante las reglas de validación también podemos evitar que se puedan modificar algunos atributos en la acción update:
public function rules() {
return array(
...
array('nombre', 'unsafe','on'=>'update'), // El nombre no se puede modificar
}
}