domanda su Yii::app()->user->nomeutente

sto cercando di capire,facendo delle prove, la logica di Yii.

Ho seguito la guida: http://www.yiiframework.com/doc/guide/1.1/en/topics.auth

per crearmi un’autenticazione con email e password, prendendo gli utenti da db pgsql.

ora ho seguito la guida di sensorario su come estendere la classe CWebUser.

Mi son creato la classe WebUser,

ho dichiarato


public $nomeutente;

e infatti se faccio:


 print_r(Yii::app()->user) 

vedo che l’istanza parte anche con il nuovo campo.

ora fatta l’autenticazione, come indicato in UserIdentity.php, in Yii::app()->user metto l’id dell’utente, e l’email in name.

se volessi settare nomeutente come devo fare?

per avere come per gli altri campi:


Yii::app()->user->nomeutente

devo utilizzare:




$this->setState('nomeutente', $record->cognome." ".$record->nome);



?

mi sembra di no.

secondo me dovrei creare i getter and setter di nomeutente nella classe WebUser

però non so la sinstassi corretta, per far venire fuori una cosa di questo tipo


Yii::app()->user->nomeutente

e per settarlo che mi dite?

mi date una mano?

grazie mille.

prova a creare una funzione getNomeUtente();

ATTENZIONE, la magia sta nel get ;)

qualcosa come




public function getNomeUtente()

   {

      return $this->cognome . " " . $this->nome;

   }



e vedi cosa ti restituisce




Yii::app()->user->NomeUtente



banned,

(codice non testato)

Io dentro il metodo autenticate di CUserIdentity ho settato id e username, tutte le altre informazioni extra dell’utente se ho memorizzate in sessione.

Non ricordo perchè ma con [font=“Menlo, Consolas,”]$this[/font][font=“Menlo, Consolas,”]->[/font][font=“Menlo, Consolas,”]setState[/font][font=“Menlo, Consolas,”]([/font][font=“Menlo, Consolas,”]’[/font][font=“Menlo, Consolas,”]title[/font][font=“Menlo, Consolas,”]’[/font][font=“Menlo, Consolas,”], [/font][font=“Menlo, Consolas,”]$record[/font][font=“Menlo, Consolas,”]->[/font][font=“Menlo, Consolas,”]title[/font][font=“Menlo, Consolas,”])[/font][font=“Menlo, Consolas,”]; ho avuto difficolta nell’acedere all’attributo extra.[/font]

[font="Menlo, Consolas,"]

[/font]

[font="Menlo, Consolas,"]Praticamente il mio autenticate è questo:[/font]

[font="Menlo, Consolas,"]


[/font]

[font="Menlo, Consolas,"]    public function authenticate()

	{

		$user=PrUser::model()->find('LOWER(txt_usr_username)=? or LOWER(eml_usr_email)=?',array(strtolower($this->username),strtolower($this->username)));

		if($user===null){

			$this->errorCode=self::ERROR_USERNAME_INVALID;

		}else if(!$user->validatePassword($this->password)){

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		}else if($user->cb_usr_flag_active!=1){

			$this->errorCode=self::ERROR_USER_NON_ATTIVO;

		}else{

			$this->_id=$user->id;

			$this->username=$user->txt_usr_username;

			Yii::app()->session['fullname']=$user->txt_usr_name . " " . $user->txt_usr_surname;

			Yii::app()->session['cb_usr_haverole_admin']=$user->cb_usr_haverole_admin;

			Yii::app()->session['cb_usr_haverole_translator']=$user->cb_usr_haverole_translator;

			Yii::app()->session['language']=$user->ddl_usr_language;

			

			$this->errorCode=self::ERROR_NONE;

		}

		return $this->errorCode==self::ERROR_NONE;

	}



[/font]

@proid

potrei utilizzare session, ma io vorrei entrare pian piano nella logica

del framework, quindi vorrei risolvere i problemi che incontro.

cmq con il setState come dicevi tu, anche io ho avuto problemi, proprio perchè chiamavo nomeutente prima che effettivamente venisse creato, perchè lo creavo in authenticate, e io lo richiamavo dall’homepage, potevo metterci un controllo e sarebbe andato, ma non mi andava di utilizzare questo tipo di approccio. proprio per quello che ti dicevo su… vorrei riuscire a capire Yii.

@banned

ho provato a fare varie prove, anche come mi suggerisci tu. ma il risultato è sempre vuoto. sono andato a guardarmi anche CWebUser per vedere come funziona il getId e il getName e in effetti ho visto che utilizzano setState e getState.

secondo me nel mio accenno di codice e nelle prove che ho fatto, il problema sta nel settare nomecompleto.

come lo devo fare secondo voi?

questo è il mio UserIdentity.php




class UserIdentity extends CUserIdentity

{


	private $_id;

	private $_nomecompleto;

	public function authenticate()

	{

		$record=Utente::model()->findByAttributes(array('email'=>$this->username));

		if($record===null)

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else if($record->password!==md5($this->password))

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else

		{

			$this->_id=$record->id;

			$this->_nomecompleto=$record->cognome." ".$record->nome;

			$this->errorCode=self::ERROR_NONE;

		}

		return !$this->errorCode;

	}

	

	public function getNomeCompleto()

	{

		return $this->_nomecompleto;

	}

	

	public function getId()

	{

		return $this->_id;

	}



e questo è il mio WebUser.php




class WebUSer extends CWebUser {


	public $nomecompleto;


	public function getNomeCompleto()

	{

		return $this->nomecompleto;

	}

	/*

	public function getNomeCompleto()

	{

		return $this->getState('__nomecompleto');

	}*/


	public function setNomeCompleto($nomecompleto)

	{

		$this->setState('nomecompleto',$nomecompleto);

	}	

}



grazie.

Ora ho sistemato i due file e… funzionare funziona,

ma non riesco ancora a capire se è il modo giusto di procedere,

se qualcuno potesse darmi conferma ne sarei contento :D

intanto posto il codice, magari a qualcuno può essere utile.

in questa maniera se in home page chiedo l’attributo di user in questa maniera:




Yii::app()->user->nomeutente

oppure

Yii::app()->user->getNomeUtente()



se non sono loggato mi da Guest,

altrimenti Cognome e Nome.

UserIdentity.php




class UserIdentity extends CUserIdentity

{


	private $_id;

	private $_nomecompleto;

	public function authenticate()

	{

		$record=Utente::model()->findByAttributes(array('email'=>$this->username));

		if($record===null)

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else if($record->password!==md5($this->password))

			$this->errorCode=self::ERROR_PASSWORD_INVALID;

		else

		{

			$this->_id=$record->id;

			$this->_nomecompleto=$record->cognome." ".$record->nome;

			$this->errorCode=self::ERROR_NONE;

			$this->setState('nomecompleto', $this->_nomecompleto);

		}

		return !$this->errorCode;

	}


	public function getId()

	{

		return $this->_id;

	}

}



WebUser.php




class WebUSer extends CWebUser {


	private $nomecompleto;

	

	public function getNomeCompleto()

	{

		if(($nomecompleto=$this->getState('nomecompleto'))!==null)

			return $nomecompleto;

		else

			return $this->guestName;

	}

}



Ciao a tutti, questo e’ il mio PRIMO POST!!! Abbiate pieta’!!!

C’e’ un motivo per cui potrebbe non funzionare il meccanismo citato? In particolare non riesco a richiamare

Yii::app()->user->isGuest(), mentre getIsGuest() funziona…

Ho sovrascritto UserIdentity come da tutorial e l’ho piazzato in “protected/components”, e non ho inserito nessun include “mi pare non servano”.

Da qualche parte e’ documentata questa funzionalita’? ho provato a cercare ma non ho trovato nulla…

Grazie

mp

Scusate,

sara’ stato il calo di zuccheri…


Yii::app()->user->isGuest()

NON FUNZIONA

perche’ la sintassi corretta e’


Yii::app()->user->isGuest

senza le parentesi

Ci ho perso un’ora…

scusate ancora

mp