sebi
(Zemog86)
August 11, 2009, 12:40pm
1
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?
mikl
(Mike)
August 11, 2009, 1:21pm
2
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?
sebi
(Zemog86)
August 11, 2009, 4:40pm
3
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?
mbi
(mbi)
August 11, 2009, 7:48pm
4
sebi:
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?
sebi
(Zemog86)
August 11, 2009, 9:03pm
5
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.
mbi
(mbi)
August 11, 2009, 9:58pm
6
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?
sebi
(Zemog86)
August 11, 2009, 10:05pm
7
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
mikl
(Mike)
August 12, 2009, 7:50am
8
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.
sebi
(Zemog86)
August 12, 2009, 11:18am
9
Ah Ok das sieht Gut aus, so werde ich das dann auch mal in Angriff nehmen.
Danke.