Проблема:
В моей таблице User есть поле password_hash.
Я создаю форму в которой юзер сможет менять себе имя емейл и пароль.
Выводя эту форму я не хочу показывать юзеру текущий пароль( тем более его хеш ).
По этому я создал в моделе два свойства
public $password;
public $password_repeat;
function rules(){
return [ ['password_repeat', 'compare', 'compareAttribute' => 'password']];
}
Вот моя форма
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($user, 'username') ?>
<?= $form->field($user, 'email') ?>
<?= $form->field($user, 'password')->passwordInput() ?>
<?= $form->field($user, 'password_repeat')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Что бы всё это хорошо работало мне пришлось сделать вот что в контроллере:
$user_id = Yii::$app->getUser()->id;
$user = User::findOne($user_id);
$post = Yii::$app->request->post();
if(isset($post['User']['password'])){
$user->setPassword(Yii::$app->request->post('password'));
unset($post['User']['password']);
unset($post['User']['password_repeat']);
}
if ($user->load($post) && $user->validate()) { .....
Мне приходиться использовать ансет , в другом случае я получаю ошибку "Password must be repeated exactly." (хотя и ввожу два одинокавых пароль).
Всё это больно похоже на вилосипед.
Вопрос:
Как сделать эту операцию правильно ?
Спасибо