Los métodos setters no son ejecutados

Hola amigos.

Estoy intentado crear un método setter para mi modelo e intentar llamarlo desde mi controlador.

En el controlador:


$_model = $this->loadModel();

$_model->etnia = 19;

$_model->save();

En el fichero del modelo:


   protected function setEtnia()

   {

       Yii::trace("Test","file");        

   }

Así que el método setEtnia no es disparada cuando asigno 19 al campo "etnia". Lo he conseguido sólo si creo un override del método __set() dentro del fichero del modelo:


public function __set($name,$value)

    {

        $setter='set'.$name;

        if(method_exists($this,$setter))

        {

                $this->$setter();

        }

        parent::__set($name,$value);

    }



Entonces, setEtnia() sí se ejecuta.

Qué estoy haciendo mal?

Gracias.

Has iniciado la propiedad que intentas asignar en la funcion ‘rules’ de tu modelo y definirla como ‘safe’?

Dime si te funciona despues…

Has iniciado la propiedad que intentas asignar en la funcion ‘rules’ de tu modelo y definirla como ‘safe’?

Dime si te funciona despues…

De donde herdas la clase??

Si la heredeas de CModel o CActiveRecord no tendrias que tener este problema…

De todas formas tu metodo setEtnia no deberia tener un parametro?

Viendo el codigo de __set en la clase CComponent te tiene que dar una idea bastante clara de lo que ocurre.

Disculpa mi comentario anterior.

Un saludo

Decirte que he creado tu metodo en mi modelo:

Public function setEtnia($val){

echo $val;

}

Y luego he llamado en el controlador:

$model->etnia=‘test’;

Y funciona. ?