首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含方案的Yii2模型保存除密码字段之外的所有

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

Stack Overflow用户
提问于 2016-04-28 11:56:55
回答 1查看 1.5K关注 0票数 0

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

代码语言:javascript
复制
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]
    ];
}

使用此配置,我可以创建一个新用户,删除一个用户,并更新除“密码”以外的所有字段。

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

代码语言:javascript
复制
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,
    ]);

}

我已经检查过“密码”字段是否在post参数上传递成功。

这就是我的观点:

代码语言:javascript
复制
    <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(); ?>

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 12:41:44

请移除

代码语言:javascript
复制
'on' => self::SCENARIO_RESET_PASSWORD

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

代码语言:javascript
复制
 $user->scenario = 'SCENARIO_RESET_PASSWORD';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36913944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档