具有方案的Yii2模型保存除密码字段之外的所有模型

时间:2016-04-28 11:56:55

标签: php yii2

在我的应用程序中,我有一个名为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,
    ]);

}

我已经检查过字段“密码”是否已成功传递给帖子参数。

这是我的观点:

    <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(); ?>

我真的不知道为什么我会收到此错误

1 个答案:

答案 0 :(得分:1)

请删除

'on' => self::SCENARIO_RESET_PASSWORD

或  在控制器操作中将您的SCENARIO定义为

 $user->scenario = 'SCENARIO_RESET_PASSWORD';