Yii::app()->User

Ciao a tutti !

Sono un nuovo utilizzatore di Yii, e vorrei cercare di capire il più possibile di questo interessante framework.

Leggendo il codice autogenerato della mia prima applicazione mi sono inbattuto nella seguente istruzione

Yii::app()->user

ora, secondo le mie conoscenze di programmazione oop, Yii::app() dovrebbe stare a significare che si cerca di accedere al metodo statico app() della classe Yii, il quale metodo restituisce secondo la documentazione ufficiale l’istanza della classe CApplication. E’ esatto ?

Quindi se restituisce un oggetto istanza di CApplication nella documentazione ufficiale di tale classe nella lista delle proprietà ci dovrebbe essere user… perchè invece non lo trovo ?

Grazie in anticipo per l’aiuto !

Mmmm cerchi user dentro Yii::app()?

No lo cerco in CApplication

http://www.yiiframework.com/doc/api/1.1/CApplication

ma nella lista delle proprietà non c’è !

app() ritorna il singleton, quindi l’istanza globale di yii, user invece fa riferimento a CWebUser come puoi leggere dalla documentazione:

http://www.yiiframework.com/doc/api/1.1/CWebUser

non mi è molto chiaro allora… perchè usare una sintassi come questa se user non è una proprietà dell’oggetto istanziato da Yii::app() ?

Scusate ma sono alle prime armi e mi sembra tutto complicato e poco chiaro…

guardati un pò come funziona:

http://www.yiiframework.com/doc/api/1.1/YiiBase#app-detail

http://www.yiiframework.com/doc/guide/1.1/it/basics.mvc

ho letto la documentazione ma (sarà per colpa mia) non riesco a capire il perchè

ad esempio anche qui un utente ha esposto il mio medesimo dubbio

http://www.yiiframework.com/forum/index.php/topic/17331-basic-things-about-yiiapp-properties/

e nonostante nella documentazione sia scritto chiaramente che Yii::app() ritorna CApplication (http://www.yiiframework.com/doc/api/1.1/YiiBase#app-detail) gli viene risposto che invece ritorna CWebApplication… boh… non sarà magari un errore nella documentazione ?

Aggiungo una domanda che fa sempre riferimento ad Yii::app()->user senza aprire un nuovo thread.

Si può utilizzare al posto delle sessioni, ad esempio, per memorizzare temporaneamente le informazioni di un utente che fa il login?

si. guardati setState e getState

nessuno che sappia rispondermi ? :expressionless:

Nel caso di una applicazione web Yii::app() ti ritorna CWebApplication che estende CApplication, essendo la classe che si occupa di gestire le funzionalità specifiche per le richieste web, gestisce i controller applicando l’MVC all’interno della applicazione e tutta una serie di altre cose.

[size="2"]Provo a rispondere:[/size]

[size=“2”]nel tuo file index.php troverai all’ultima riga:[/size]


Yii::createWebAppliation($config)->run();

Questa istruzione esegue la funzione createWebApplication contenuta nel YiiBase (classe estesa dalla classe Yii che istanzi nell’index.php) alla riga 96,

almeno nella versione del framework 1.1.13. Questa funzione istanzia la classe CWebApplication (/framework/web/CWebApplication.php) che è a sua volta una

estensione della classe CApplication (/framework/base/CApplication.php).

La __construct di questa classe comanda di eseguire la funzione registerCoreComponents(). Nel caso di una WebApplication, questa è stata estesa per eseguire la funzione setComponents() passandogli come parametri un array di valore che comprende anche il famigerato ‘user’…

Questa funzione si trova nel file /framework/web/CModule.php (CApplication è una estensione di CModule) che a sua volta esegue, per ogni elemento dell’array

passato come parametro, la funzione setComponent (senza la ‘s’) che fà una serie di cose…

Capisco bene che potrebbe sembrare "arabo" :slight_smile: e non voglio assolutamente sembrare uno di quelle persone alle quali fai le domande e che

ti rispondono "leggi la documentazione", ma penso che sia più utile, per chiarire i tuoi dubbi, spulciare il codice seguendo le funzioni sopra descritte…

Spero almeno di avere descritto i files corretti…

Grazie per la domanda perchè è stato un buon esercizio anche per me.

Grazie a te per la risposta ! proverò a spulciare il codice secondo le indicazioni che mi hai dato, anche se sono non mi sono del tutto chiare :expressionless:

confesso che un pò, però, comincio a pensare che quanto scritto nella documentazione sul fatto che app() ritorni CApplication possa essere inesatto, visto che in realtà ritorna CWebApplication…

Si però, … CWebApplication estende CApplication.