Pergunta

Em Yii2 você pode acessar a identidade de interface para o usuário atual usando o identityInterface objeto de dentro da \o yii\web\Usuário de classe com algo como isto

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

Existe uma maneira de obter e definir parâmetros adicionais (sem estender a identidade de classe)?

Basicamente, um equivalente do Yii 1.x getState(), e setState() métodos CWebUser para armazenar e recuperar informações de sessão como esta

Yii::app()->user->setState("some_attribute",$value);
Yii::app()->user->getState('some_attribute',$defaultValue);
Foi útil?

Solução

Bem parece que este foi removido intencionalmente para evitar "confusão".Ver https://github.com/yiisoft/yii2/issues/167.Assim, a única maneira de fazer isso chamando a classe de sessão diretamente.

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

Porque agora armazenados diretamente na sessão sem prefixo é melhor namespace as teclas com identificadores como user.xxxx para evitar a colisão com outro conjunto de chaves em outro ponto da aplicação.

Outras dicas

A melhor maneira para adicionar atributos para o usuário está criando pública atributo em sua Classe de Usuário.

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

Como usar:

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

Em Yii2 \O Yii::$app->user->identidade conter instância do identityClass.Então, se você quiser alguma identityClass-dados relacionados - apenas usá-lo como instância de identityClass.

Você também pode usar um getter função para incluir outras informações de identidade do usuário.Por exemplo, recuperar fullname a partir de uma tabela de perfil.

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

Em seguida, você pode usá-lo como se você possui um atributo chamado fullname, assim como

Yii::$app->user->identity->fullname;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top