2016-04-28 61 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

相關問題