как добавить функцию ошибки в модель yii2 - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу сделать форму для смены пароля, с полем старый пароль и новый пароль, как это

<?php $form = ActiveForm::begin(); ?>


    <?= $form->field($model, 'old_password')->textInput()->label('Old Password  ') ?>
    <?= $form->field($model, 'password')->passwordInput()->label(' New Password ') ?>
    <?= $form->field($model, 'confirm_password')->passwordInput()->label('Confirm new password') ?>

    <div class="form-group">
        <?= Html::submitButton('Change', ['class' => 'btn btn-primary btn-fill']) ?>
    </div>
<?php ActiveForm::end(); ?>

У меня есть такой контроллер

public function actionPass()
{
    $id=Yii::$app->user->id;
    $modelUser = $this->findModel($id);
    try { 
        $model = new \frontend\models\ChangePasswordForm($id);
    } catch (InvalidParamException $e) {
        throw new \yii\web\BadRequestHttpException($e->getMessage());
    }

    if ($model->load(\Yii::$app->request->post())) {
        if ( $model->validate() && $model->changePassword()) {
            Yii::$app->session->setFlash('success', 'Password success to change ');
            return $this->render('index', [
                        'model' => $model,
                        'modelUser' => $modelUser,
            ]);

        } else {
            Yii::$app->session->setFlash('error', 'Password failed to change!');
            return $this->render('index', [
                'model' => $model,
                'modelUser' => $modelUser,
            ]);
        }
    }

У меня есть модель для управления сменой пароляОбработка

class ChangePasswordForm extends Model
{
public $id;
public $password;
public $confirm_password;
public $old_password;

/**
 * @var \common\models\User
 */
private $_user;

/**
 * Creates a form model given a token.
 *
 * @param  string                          $token
 * @param  array                           $config name-value pairs that will be used to initialize the object properties
 * @throws \yii\base\InvalidParamException if token is empty or not valid
 */
public function __construct($id, $config = [])
{
    $this->_user = User::findIdentity($id);

    if (!$this->_user) {
        throw new InvalidParamException('Unable to find user!');
    }

    $this->id = $this->_user->id;
    parent::__construct($config);
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['password','confirm_password'], 'required'],
        [['password','confirm_password'], 'string', 'min' => 8],
        ['confirm_password', 'compare', 'compareAttribute' => 'password'],
        ['old_password','findPasswords'],
    ];
}

/**
 * Changes password.
 *
 * @return boolean if password was changed.
 */
public function changePassword()
{
    $user = $this->_user;
    $user->setPassword($this->password);
    //$user->ps=$this->password;

    return $user->save();
}

public function findPasswords($attribute, $params, $validator)
{
    $user = User::findOne(Yii::$app->user->id);
    if (!Yii::$app->getSecurity()->validatePassword($this->old_password, $user->password_hash))
        $this->addError($attribute, 'The Old Password not match.');
}
   }

Проверка правильности нового пароля и подтверждение нового пароля работает, но не для поля старого пароля, ошибка не отображается в форме при заполнении пароля, который не совпадает со старым паролем. Любая помощь?

...