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);
War es hilfreich?

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top