ciao a tutti,
Nel controller che completa la registrazione dei miei utenti ho scoperto che l’istruzione
$model->attributes=$_POST['CompleteForm'];
non assegna ai campi del mio model i parametri ricevuti dalla form.
In questo form ci sono solo 3 campi
-
username
-
password
-
email (nel form hidden field)
e nel model sono tutti disciplinati nel Rules()
array('username, password', 'required'),
array('username,password,email', 'safe'),
Ora, siccome l’account è già stato creato precedentemente con la sola mail, il mio scopo è quello di andare ad aggiornare gli altri due (username e password).
Per fare questo uso il seguente codice:
$model = new CompleteForm;
$email = $_POST['CompleteForm']['email'];
/* queste le uso per sistemare manualmente il problema
$username = $_POST['CompleteForm']['username'];
$password = $_POST['CompleteForm']['password'];
*/
// carico i dati già presenti nel DB
$model=CompleteForm::model()->find("email=:postEMAIL", array(':postEMAIL'=>$email));
//QUESTO E' IL COMANDO INCRIMINATO
$model->attributes=$_POST['CompleteForm'];
/*
queste le uso per sistemare manualmente il problema
$model->username = $username;
$model->password = $password;
*/
$model->save();
Come avrete capito se uso il comando
$model->attributes=$_POST['CompleteForm'];
i campi username e password del $model non vengono aggiornati con i dati presenti nel form.
Ho letto che le variabili non specificate devono essere indicate come safe per cui ho aggiunto quella riga nel Rules(), ma non cambia il risultato.
Se invece imposto manualmente i campi prendendoli dal Post e settandoli nel $model, funziona tutto correttamente.
Avete qualche idea di che cosa sbaglio?
Ho anche pensato che ci possa essere un microdivario di tempo da quando lancio la retrieve dei dati dal DB e la riga successiva che assegna gli attributes, tale per cui in realtà prima si assegnano gli attributes e poi la $model viene popolata con i dati del DB che di fatto “sovrascrive” il $model con i valori originali. Ma forse sto vanificando…
Grazie x ogni consiglio e scusate ma con Yii ci lavoro da nemmeno 7 giorni.