Wie füge ich in Yii2 weitere Benutzeridentitätssitzungsattribute hinzu?
Frage
In Yii2 können Sie auf die Identitätsschnittstelle für den aktuellen Benutzer zugreifen, indem Sie das IdentityInterface-Objekt innerhalb der \yii\web\User-Klasse mit etwas wie diesem verwenden
\Yii::$app->user->identity->id;
Gibt es eine Möglichkeit, zusätzliche Parameter abzurufen und festzulegen (ohne die Identitätsklasse zu erweitern)?
Im Grunde ein Äquivalent von Yii 1.x getState()
, Und setState()
Methoden in CWebUser
um solche Sitzungsinformationen zu speichern und abzurufen
Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
Lösung
okay, es scheint, dass dies absichtlich entfernt wurde, um "Verwirrung" zu vermeiden.Siehe https://github.com/yiisoft/yii2/issues/167 .Die einzige Möglichkeit, dies zu tun, indem Sie die Sitzungsklasse direkt anrufen.
generasacodicetagpre. Da es nun direkt in der Sitzung ohne Präfix gespeichert ist, ist es am besten, die Tasten mit Kennungen wie user.xxxx
zu namensspasieren, um Kollision mit einem anderen Schlüsselsatz an einem anderen Punkt der Anwendung zu vermeiden.
Andere Tipps
Der beste Weg, um Benutzer Attribute hinzuzufügen, erstellt das öffentliche Attribut in Ihrer Benutzerklasse.
generasacodicetagpre.Wie zu verwenden:
generasacodicetagpre.in yii2 \ yii :: $ app-> user-> identität enthalten Instanz der Identitätsklasse.Wenn Sie also einige IdentityClass-Daten wünschen, verwenden Sie es einfach wie Instanz der IdentityClass.
Sie könnten auch a verwenden Getter Funktion, um zusätzliche Identitätsinformationen für den Benutzer hinzuzufügen.Zum Beispiel abrufen fullname
aus einer Profiltabelle.
class User extends ActiveRecord implements \yii\web\IdentityInterface
{
// Other code goes here...
public function getFullname()
{
$profile = Profile::find()->where(['user_id'=>$this->id])->one();
if ($profile !==null)
return $profile->fullname;
return false;
}
}
Dann können Sie es so verwenden, als hätten Sie ein Attribut mit dem Namen fullname
, so
Yii::$app->user->identity->fullname;