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 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 } }