2015-02-28 3 views
1

У меня есть расширенное приложение. Я создаю CRUD для модели пользователя. Поэтому я получил обновление. Я пытался обновить пароль, добавивyii2 Как изменить пароль пользователя через actionUpdate?

<?= $form->field($model, 'password')->passwordInput() ?> 

Но назвать ошибку, что-то вроде «пароль записи только переменную»

Я пытался использовать полевые

<?= $form->field($model, 'new_password')->passwordInput() ?> 

С добавлением в actionUpdate model->setPassword($this->new_password); и он бросает Getting unknown property: common\modules\user\controllers\DefaultController::new_password. но model->setPassword('123456'); успешный установка pussword 123456.

Как я могу получить new_password поле из поля зрения, чтобы положить его в model->setPassword('there');

Или, может быть, есть лучший способ сделать это?

UPD

Я попытался это сделать. Не работает.

public function beforeSave($insert) 
    { 
    if (parent::beforeSave($insert)) { 
     if ($this->new_password) { 
     $this->setPassword($this->new_password); 
     } 
     return true; 
    } else { 
     return false; 
    } 
    } 

UPD2

public function setPassword($password) { 
    $this->password_hash = Yii::$app->security->generatePasswordHash($password); 
    } 

И password_hash письма в базе данных. Я могу легко изменить хеш, сгенерированный CRUD, но не знаю, как использовать setPassword() в updateAction.

ответ

1

Вы можете попробовать написать updatePassword функцию как setPassword с другой переменной

public function updatePassword($new_password) { 
    $this->password_hash = Yii::$app->security->generatePasswordHash($new_password); 
    } 

объявить переменная

public $new_password; 

И добавить его в правилах()

public function rules() { 
    return [ 
     //... 
     ['new_password', 'required'], 
     ['new_password', 'string', 'min' => 6], 
    ]; 
    } 

И actionUpdate в контроллере добавить

$model->updatePassword($model->new_password); 

Это должно помочь

1

Здесь «$ this» - ваш контроллер, который, конечно же, не имеет свойства «new_password». Вы бы лучше не установить новый пароль в контроллере, но сделать это в модели, например, в методе BeforeSave:

if ($this->new_password) { 
    $this->setPassword($this->new_password); 
} 
+0

Посмотрите на вопрос обновления. Я пытался и не добился успеха. Может быть, я сделал это неправильно? – Heroicone71

+0

Попробуйте отладить его и посмотреть, попадает ли скрипт в этот оператор «если» или нет. Могут быть разные причины: например, ваш 'new_password' должен быть в методе rules() - например. ['new_password', 'string']. Опять же, мы не знаем, что делает метод setPassword. Вернет ли он что-нибудь, или, я думаю, это что-то вроде «$ this-> password = $ password». –

+0

Я добавляю правила, но это не работает. Id добавляет метод setPassword. Я не знаю, как его отладить. – Heroicone71

Смежные вопросы