Domanda

In Yii2 è possibile accedere all'interfaccia di identità per l'utente corrente utilizzando l'oggetto IdentityInterface dall'interno della classe \ Yii \ Web \ User Class con qualcosa come questo

 \Yii::$app->user->identity->id;
.

C'è un modo per ottenere e impostare ulteriori parametri (senza estendere la classe di identità)?

Fondamentalmente un equivalente di Yii 1.x getState()Gode e metodi generacodictagCode in setState() per memorizzare e recuperare le informazioni sulla sessione come questa

Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
.

È stato utile?

Soluzione

Va bene Sembra che questo sia stato rimosso intenzionalmente per evitare la "confusione".Vedi https://github.com/yiisoft/yii2/issues/167 .Quindi l'unico modo per farlo chiamando direttamente la classe di sessione.

\Yii::$app->session->set('user.attribute',$value);
\Yii::$app->session->get('user.some_attribute');
.

Poiché ora è memorizzato direttamente in sessione senza prefisso è meglio per il namespace i tasti con identificatori come user.xxxx per evitare la collisione con un altro set di tasti nel punto diverso dell'applicazione.

Altri suggerimenti

Il modo migliore per aggiungere attributi all'utente sta creando attributo pubblico nella tua classe utente.

class Yiidentity extends ActiveRecord implements \yii\web\IdentityInterface{
       public $awesomeAttribute = "foo";
}
.

Come utilizzare:

Yii::$app->user->identity->awesomeAttribute;
.

in yii2 \ yii :: $ app-> utente-> identità contengono istanza dell'identityclass.Quindi, se vuoi alcuni dati relativi all'identityclass, solo usarlo come istanza dell'identityclass.

È inoltre possibile utilizzare una funzione Getter per includere ulteriori informazioni sull'identità per l'utente.Ad esempio, recuperare fullname da una tabella del profilo.

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;
    }
}
.

Quindi, puoi usarlo come se si dispone di un attributo denominato fullname, come

Yii::$app->user->identity->fullname;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top