Я хочу создать пользовательский класс 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 из него ?
Я рекомендую прочитать это: Когда использовать себя сверх $ this? вы действительно путаете 2.
$objUserMdl = new Users;
$user = $objUserMdl::findOne($id);
$userRole = $objUserMdl->getUserRole($user->user_id);
Вы вызываете :: для объекта, вы не можете этого сделать.
Я говорю, удалите то, что вы сделали, и начните заново, это должно быть намного проще, чем то, что вы написали. Чтобы показать вам, как это сделать правильно, потребуется много времени, просто посмотрите в шаблоне yii2 advance и посмотрите, как они это делают. Вы можете использовать свой собственный класс идентификации и устанавливать там любые специальные атрибуты. Просто изучите код yii2.
Других решений пока нет …