===== Activerecord: 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 las de aquellos que asignamos por programa (como por ejemplo, fecha_alta). 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 [ [['usuarios_id'], 'required'], [['usuarios_id'], 'integer'], [['fecha_alta'], 'default', date('Y-m-d')], [['estado'], 'string', 'max' => 1], [['usuarios_id'], 'exist', 'skipOnError' => true, 'targetClass' => \app\models\Usuarios::className(), 'targetAttribute' => ['usuarios_id' => 'id']], ]; } En [[http://www.yiiframework.com/doc-2.0/guide-input-validation.html|este documento]] se explica con detalle el sistema de validación Podemos crear nuestros propios criterios de validación, mediante funciones anónimas inline, o creando un método en la clase y utilizándolo en rules, de la forma siguiente: public function rules() { return [ ... ['telef1', 'telefono', 'movil'=>true], ]; } /** * Validación de teléfono. Si param['movil'] es true , comprueba que empieza por 6 */ public function telefono($attribute,$params,$validator) { 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'); } El validador "default" sirve para asignar un valor por defecto a un atributo cuando es nulo. Típicamente, se utiliza en valores como: usuario que carga el registro, fecha de alta, estado inicial.... Se pueden definir validaciones condicionales, que se ejecutan solamente en algunos casos. (Ver opción 'when' en la documentación de yii)