Yii2模型的场景保存除密码字段外的所有内容


Yii2 model with scenarios save all except the password field

在我的应用程序中,我有一个名为User的模型,我在其中实现了一个验证场景。

const SCENARIO_RESET_PASSWORD = 'passwordReset';
public function rules()
{
    return[
        [['name','surname','password','username','id_role'], 'required'],
        [['email','email2'], 'email'],
        [['username','email'], 'unique'],
        ['confirmPassword', 'compare', 'compareAttribute'=>'password', 'on' => self::SCENARIO_RESET_PASSWORD]
    ];
}

有了这个配置,我可以创建一个新用户,删除一个并更新除"密码"之外的所有字段。

这是我的控制器中的操作:

public function actionUpdate($id)
{
    $user = User::findOne($id);
    if($user->load(Yii::$app->request->post())&& $user->validate()) {
      $user->update();
      $this->redirect('yii'helpers'Url::toRoute('index'));
    }
    return $this->render('update',[
        'user' => $user,
    ]);
}

我已经检查了字段"password"是否成功地传递到post参数上。

这是我的观点:

    <h1> Edit User </h1>
<?php
     $form = ActiveForm::begin([
            'id' => 'active-form',
            'options' =>  [
                'class' => 'form-horizontal',
                'enctype' => 'multipart/form-data'
            ],
        ]); 
?>
<?= $form->errorSummary($user); ?>
<?= $form->field($user, 'name') ?>
<?= $form->field($user, 'surname') ?>
<?= $form->field($user, 'username') ?>
<?= $form->field($user, 'email') ?>
<?= $form->field($user, 'password')->passwordInput() ?>
<?php  if(Yii::$app->user->identity->id_role === User::USER_ADMIN): ?>
<?= $form->field($user, 'id_role')->dropDownList(
        Role::find()->select(['name','id'])->indexBy('id')->column(),
        ['prompt'=>'Select a role']
        );
?>
<?php endif; ?>
<div class="form-group">
    <?= Html::submitButton('Save the user', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>

我真的不知道为什么我会得到这个错误

请删除

'on' => self::SCENARIO_RESET_PASSWORD

或将控制器操作中的场景定义为

 $user->scenario = 'SCENARIO_RESET_PASSWORD';