Das Userobjekt

Heho,

Ich habe jetzt den Login mal auf Datenbank umgestellt was soweit auch ganz gut klappt, nur habe ich jetz

das Problem das ich nicht weis wie ich jetzt wieder an meine userobject rankomm.

Damit habe ich es schon probiert:

var_dump(Yii::app()->user);

Da kommt aber nix brauchbares bei raus:

object(CWebUser)#11 (10) { ["allowAutoLogin"]=> bool(true) ["guestName"]=> string(5) "Guest" ["loginUrl"]=> array(1) { [0]=> string(10) "site/login" } ["identityCookie"]=> NULL ["_keyPrefix:private"]=> string(32) "f8c9490e44dc8d3d4328fabf9c3aa4bb" ["_access:private"]=> array(0) { } ["behaviors"]=> array(0) { } ["_initialized:private"]=> bool(true) ["_e:private"]=> NULL ["_m:private"]=> NULL }

Das bekomme ich aus dem var_dump, egal ob ich eingeloggt bin oder nicht.

Kann mir mal wer auf die sprünge helfen?

Yii::app()->user liefert dir das CWebUser-Objekt zum aktuellen User zurück. Das ist aber was anderes, als dein User-Datensatz in der DB. Der wurde ja nur von UserIdentity zur Authentifizierung verwendet. Falls Yii::app()->user->id gesetzt ist, kannst du dir damit den zugehörigen DB-User (ein AR dazu hast du ja sicher) mit User::model()->findByPk() holen.

Meintest du das?

Ja ok so komme ich an den Datensatz, wo platziert man denn in Yii am günstigsten eine methode

getCurrentUser ala Rails? Also so das sie in jedem Controller/View abrufbar ist?

was macht denn getCurrentUser in Rails?

Genau das was Mike schon vorgeschlagen hatte:

returns current user by session

def getCurrentUser

    if session[:user_id] != nil


	    @current_user ||= User.find(session[:user_id])


    else


	    @current_user


    end

end

in Yii sollte das dann in etwa so aussehen:




public function getCurrentUser()

{

   return User::model()->findByPk(Yii::app()->user->id)

}



nur wo platziere ich die action damit ich sie von jedem punkt in der Application aufrufen kann?

In Rails hatte ich die immer in meinem AuthController welcher vom ApplicationController geerbt hat,

damit war sie im höchsten Punkt der Vererbungskette und somit überall verfügbar.

wie wärs denn mit der UserIdentity selber? dort lädst du doch schon den User-Datensatz, den kannst du doch dort als property ablegen?

kopf -> wand

Stimmt hätte ich auch selbst drauf kommen können, naja yii fühlt sich noch ein wenig fremd an, muss erstmal

schauen was hier anders ist als bei Rails, soviel ist das aber gar nicht ;)

Ich hab das in einem Projekt in meine eigene Userklasse gelegt:


class WebUser extends CWebUser {

     public function getCurrentUser() {

 ...

und diesen in der main.php konfiguriert:


return array(

      'components' => array(

          'user' => array(

              'class' =>'WebUser'

          ),

  ...

Damit kannst du den Datensatz überall mit Yii::app()->user->CurrentUser abrufen.

Ah Ok das sieht Gut aus, so werde ich das dann auch mal in Angriff nehmen.

Danke.