Пользовательский класс userIdentity в yii2

Я хочу создать пользовательский класс userIdentity в соответствии с моими конкретными требованиями. Вот код

<?php
namespace app\models;
use yii\web\IdentityInterface;
use app\models\dbTables\Users;

class UserIdentity implements IdentityInterface{

   const ERROR_USERNAME_INVALID=3;
   const ERROR_PASSWORD_INVALID=4;
   const ERROR_NONE=0;
   public $errorCode;

   private  $_id;
   private  $_email;
   private  $_role;
   private  $_name;

   public  function findIdentityById($id){
       $objUserMdl      = new Users;
       $user            = $objUserMdl::findOne($id);
       $userRole        = $objUserMdl->getUserRole($user->user_id);
       $this->_id       = $user->user_id;
       $this->_email    = $user->email_address;
       $this->_role     = $userRole;
       $this->_name     = $user->full_name;
       return $this;
    }

    public function getId()
    {
       return $this->_id;
    }

    public function getName(){
       return $this->_name;
    }

    public function getEmail(){
       return $this->_email;
    }

    public function getRole(){
       return $this->_role;
    }

    public static function findIdentity($id)
    {
      return self::findIdentityById($id);
    }

    public function getAuthKey()
    {
       throw new NotSupportedException('"getAuthKey" is not implemented.');
    }

    public function validateAuthKey($authKey)
    {
        throw new NotSupportedException('"validateAuthKey" is not implemented.');
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    }



}

?>

В основном у меня есть две роли и пользователи таблиц, и я хочу установить конкретные свойства обеих таблиц в yii::$app->user->identity

Когда я вызываю вышеуказанный код findIdentity($id) функция возвращает ошибку по понятным причинам, утверждая, что я не могу вызвать $this в статической функции. Как я могу установить требуемые свойства в функции и вернуть экземпляр класса userIdentity из него?

1 ответ

Я рекомендую прочитать это: Когда использовать self сверх $this? вы действительно путаете 2.

   $objUserMdl      = new Users;
   $user            = $objUserMdl::findOne($id);
   $userRole        = $objUserMdl->getUserRole($user->user_id);

Вы вызываете:: для объекта, вы не можете этого сделать.

Я говорю, удалите то, что вы сделали, и начните заново, это должно быть намного проще, чем то, что вы написали. Чтобы показать вам, как это сделать правильно, потребуется много времени, просто посмотрите в шаблоне yii2 advance и посмотрите, как они это делают. Вы можете использовать свой собственный класс идентификации и устанавливать там любые специальные атрибуты. Просто изучите код yii2.

Другие вопросы по тегам