Я хочу сделать форму для смены пароля, с полем старый пароль и новый пароль, как это
<?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.');
}
}
Проверка правильности нового пароля и подтверждение нового пароля работает, но не для поля старого пароля, ошибка не отображается в форме при заполнении пароля, который не совпадает со старым паролем. Любая помощь?