2016-04-28 35 views
0

在我的应用程序中,我有一个名为User的模型我已经实现了验证方案。Yii2模型与场景保存除密码字段以外的所有内容

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

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

+0

删除''on'=> self :: SCENARIO_RESET_PASSWORD]'并检查一次。 –

回答

1

请删除

'on' => self::SCENARIO_RESET_PASSWORD 

或 在定义您的情况您控制器动作为

$user->scenario = 'SCENARIO_RESET_PASSWORD'; 
+0

我试过了,但不起作用 – giovaZ

+0

不要在模型中使用场景,只能从模型中删除并在控制器中使用它。 –

+0

我已经完全删除模型和控制器的情况,但它不工作 – giovaZ

相关问题