页面怎么不会按照逻辑显示呢
来源:4-1 创建后台模块

慕慕7355481
2017-05-22
我自己写代码进入后端之后,实现修改密码的功能,想实现的功能是如果没有填写,那么显示ActiveForm,如果填写了修改内容并且修改成功了,那么显示密码修改成功。首先是PasswordFrom.php
<?php namespace app\models; use yii\base\Model; use yii\helpers\HtmlPurifier; use YII; class PasswordForm extends Model { public $curPassword; public $newPassword; public $confirmPassword; public function rules() { return [ [['curPassword', 'newPassword', 'confirmPassword'], 'required', 'message' => '{attribute}不能为空'], ['curPassword', 'validatePassword'], ['newPassword', 'validateNewPassword'], ['confirmPassword;', 'validateConfirmPassword'], ]; } public function attributeLabels() { return [ 'curPassword' => '请输入您的密码', 'newPassword' => '请输入您的新密码', 'confirmPassword' => '请再输入您的新密码', ]; } public function validatePassword($attribute, $params) { if (!$this->hasErrors()) { $pattern = '/^[A-Za-z0-9]+$/'; if (!preg_match($pattern, HtmlPurifier::process($this->curPassword))) { $this->addError($attribute, '密码只能由数字和英文字母组成.'); } } } public function validateNewPassword($attribute, $params) { if (!$this->hasErrors()) { $pattern = '/^[A-Za-z0-9]+$/'; if (!preg_match($pattern, HtmlPurifier::process($this->newPassword))) { $this->addError($attribute, '密码只能由数字和英文字母组成.'); } if (HtmlPurifier::process($this->curPassword) === HtmlPurifier::process($this->newPassword)) { $this->addError($attribute, '您的新密码和原有的密码相同,请重新输入一个不一样的密码!'); } } } public function validateConfirmPassword($attribute, $params) { if (!$this->hasErrors()) { $pattern = '/^[A-Za-z0-9]+$/'; if (!preg_match($pattern, HtmlPurifier::process($this->confirmPassword))) { $this->addError($attribute, '密码只能由数字和英文字母组成.'); } if (HtmlPurifier::process($this->newPassword) !== HtmlPurifier::process($this->confirmPassword)) { $this->addError($attribute, '您两次输入的密码不相同,请重新输入!'); } } } public function getUser() { return User::findByUsername(Yii::$app->session->get('loginUser')->username); } public function password() { $user = User::find()->where(['username' => Yii::$app->session->get('loginUser')->username])->one(); $user->password = password_hash(HtmlPurifier::process($this->newPassword), PASSWORD_DEFAULT); $user->save(); } }
页面展示password.php:
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; $this->title = '登录界面'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="account-password"> <?php if (Yii::$app->session->get('passwordFormSubmitted') && Yii::$app->session->set('passwordFormSubmitted', false)): ?> <div class="alert alert-success"> <h3>修改密码成功!</h3> </div> <?php else: ?> <?php $form = ActiveForm::begin([ 'id' => 'password-form', 'layout' => 'horizontal', 'fieldConfig' => [ 'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-6\">{error}</div>", 'labelOptions' => ['class' => 'col-lg-3 control-label'], ], ]); ?> <?= $form->field($model, 'curPassword')->passwordInput(['autofocus' => true]) ?> <?= $form->field($model, 'newPassword')->passwordInput() ?> <?= $form->field($model, 'confirmPassword')->passwordInput() ?> <br /> <div class="form-group"> <div class="col-lg-offset-3 col-lg-9"> <?= Html::submitButton('修改密码', ['class' => 'btn btn-success btn-lg', 'name' => 'password-button']) ?> </div> </div> <?php ActiveForm::end(); ?> <?php endif; ?> </div>
控制器中的函数:
public function actionPassword() { $model = new PasswordForm(); if ($model->load(Yii::$app->request->post()) && $model->password()) { Yii::$app->session->set('passwordFormSubmitted', true); $this->refresh(); } return $this->render('password', [ 'model' => $model, ]); }
得到的显示结果是:密码修改成功了,但是还是ActiveForm的界面,而不是提示:修改密码成功!
老师,这是为什么?
写回答
4回答
-
回来了吗,回来了叫我
032017-05-22 -
Jason
2017-05-22
还是老样子?session也换成setflash还是老样子吗
062017-05-22 -
Jason
2017-05-22
另外尽量使用 setFlash()和getFlash()方法
012017-05-22 -
Jason
2017-05-22
把refresh去掉就可以了
012017-05-22
相似问题