yii2: Как войти в систему, используя две таблицы базы данных?

У меня есть две таблицы в базе данных table1 и table2, и я пытаюсь войти в систему, используя имя пользователя и пароль table1 и table2. У меня есть отдельные модели для table1 и table2. Моя форма входа

class LoginForm extends Model
{

public $email;
public $password;
public $rememberMe = true;
public $status;
private $_user = false; 
/**
 * @return array the validation rules.
 */

public function rules()
{
    return [
        [['email', 'password'], 'required'],
        ['rememberMe', 'boolean'],
        ['password', 'validatePassword'],
    ];
}

/**
 * Validates the password.
 * This method serves as the inline validation for password.
 *
 * @param string $attribute the attribute currently being validated
 * @param array $params the additional name-value pairs given in the rule
 */

 public function validatePassword($attribute)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();
        $pass= (table1::find()->where(['Password'=>$this->password] ) OR (table2::find()->where(['Password'=>$this->password] ) ->one()));
        if (!$user || !$pass) {
            $this->addError($attribute, 'Incorrect email or password.');
        }
    }
    }
/**
 * Logs in a user using the provided username and password.
 * @return boolean whether the user is logged in successfully
 */

public function login()
{
    if ($this->validate()) {
        return Yii::$app->user->login($this->getUser(), $this->status, $this->rememberMe ? 3600*24*30 : 0);
    }
    return false;
}

/**
 * Finds user by [[username]]
 *
 * @return User|null
 */

public function getUser()
{
    if ($this->_user === false) {
    $this->_user =Table1::findByEmail_id([$this->email ]) OR Table2::findByEmail_id([$this->email ]);
    }
    return $this->_user ;   
}

}

Я пытался так, но я не могу войти, я получил ошибку

Неустранимая ошибка PHP — yii\base\ErrorException Вызов функции-члена validatePassword() для не-объекта

Может ли кто-нибудь помочь мне заранее спасибо


person Ammu    schedule 18.06.2016    source источник


Ответы (1)


Вам нужно будет скопировать эту функцию в Table1 и Table2

public function validatePassword($password)
{
    return Yii::$app->security->validatePassword($password, $this->password_hash);
}

Вы также можете перейти по ссылке ниже: http://www.bsourcecode.com/yiiframework2/yii-2-user-login-from-database/

person Janhavi Dewoolkar    schedule 18.06.2016
comment
password_hash используется для проверки пароля. Если у вас нет хэша пароля, вы можете изменить функцию в соответствии с вашими требованиями. В вашем коде validatePassword использует $user-›validatePassword($this-›password) и выдает ошибку, потому что ее нет в модели. - person Janhavi Dewoolkar; 18.06.2016
comment
я хочу проверить пароль двух таблиц, поэтому я изменил функцию validatePassword..... Я отредактировал свой вопрос. - person Ammu; 18.06.2016