Removiendo el atributo a un modelo

Suponiendo que tengo un modelo “ModelU” con los atributos ‘username’ y ‘password’

Y hago un formulario para que estos datos puedan ser modificados…

El campo password se mantiene bloqueado para evitar que se modifique… aunque se puede activar con un boton…

Entonces al hacer post del formulario tiene la siguiente salida…

Escribo algo en el campo username, mientras el campo password esta bloqueado


Array

(

  [username] => user test

)

Escribo algo en el campo username, desbloqueo el campo password y le escribo algo


Array

(

  [username] => user test

  [password] => userpassword

)

Y hasta aqui todo va bien… tiene sentido y así debe de ser… pero sucede lo siguiente en el action()


public function actionUpdate()

{

  // aqui se carga el modelo de datos

  // ojo porque aqui el campo password retorna lo que existia en la BD

  $model=$this->loadModel();

  if(isset($_POST['ModelU']))

  {

    // se reemplazan los datos del modelo por los enviados por $_POST

    $model->attributes=$_POST['ModelU'];

    // aunque el campo password no fue enviado por $_POST, este ya existe en el modelo causa de $this->loadModel()


    // mientras el password no haya sido enviado por $_POST no quiero almacenarlo

    // entonces pense remover del modelo el atributo password y solamente dejar username usando unsetAttributes

    // pero al hacer esto password no se remueve del modelo, simplemente queda vacio y se almacena en blanco


    $model->save();

  }

  $this->render('update');

}

Alguna idea para mejorar esto ?


// se reemplazan los datos del modelo por los enviados por $_POST

if(!isset($_POST['ModelU']['password'])) $_POST['ModelU']['password'] = $model->password;

$model->attributes=$_POST['ModelU'];

Entiendo que así, si no envian el password en el formulario, conservas el password anterior.