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

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