Yii Framework Forum: Class Useridentity E Metodo Setstate - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Class Useridentity E Metodo Setstate Rate Topic: -----

#1 User is offline   Glider 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 26-November 12

Posted 26 November 2012 - 10:34 AM

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.
0

#2 User is offline   Glider 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 26-November 12

Posted 26 November 2012 - 11:06 AM

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
0

#3 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,987
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 29 November 2012 - 10:06 PM

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.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users