Class Useridentity E Metodo Setstate

Ciao a tutti,

innanzitutto saluto tutti.

Sono un nuovo utente e, come avrete capito, mi sto avvicinando a questo interessante framework.

Fatta questa premessa veniamo al problema.

Vorrei far comparire a destra del nome utente, dopo il login, anche il suo ruolo.

Per fare questo, ho creato nella tabella utente di mysql un campo ruolo che per il momento, può avere admin o staff.

Poi ho studiato un pò la classe UserIdentity ed ho capito che si può settare nella sessione di login uno o più valori con il metodo setState(key,val).

Ho provato a scrivere il seguente codice nella classe UserIdentity:




$this->setState('roles', $user->ruolo);



In pratica vorrei aggiungere alla variabile roles, nella sessione, il valore restituito dalla query sulla tabella utente.

Poi ho modificato il menu in questo modo di main.php (ho aggiunto Yii::app()->user->roles):




array('label'=>'Logout ( '.Yii::app()->user->name. ' - '.Yii::app()->user->roles. ' )', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)



Il problema è che a volte l’applicazione va in errore in quanto la variabile user->roles non è definita…ed ottengo una CException “Property “CWebUser.roles” is not defined.”

Se provo a fare login senza visualizzare il ruolo nel menu, poi modifico il sorgente in modo da visualizzare il ruolo nel menu, e faccio refresh della pagina ottengo il valore corretto.

Come posso risolvere?

Grazie.

Credo di aver risolto.

In pratica il problema era dovuto al fatto che prima che la classe UserIdentity valorizzasse il parametro roles (che metto nella sessione), tale parametro è null e quindi l’applicazione andava in errore.

Ho fatto un controllo prelimiare prima di popolare il menu; se la variabile è null non stampo nulla, se è popolata con il ruolo allora stampo il ruolo affianco al nome utente.

L’unico dubbio è se va bene fare questo controllo nel main.php piuttosto che in altra parte del framework.

Ciao

A me sembra che scrivi il dato in un punto, poi lo leggi da un altro. In sostanza per scrivere nella sessione va bene scrivere questo:


$this->setState('roles', $user->ruolo);

ma poi per leggero potresti usare questo:


$this->getState('roles');

Ecco la guida.