页面怎么不会按照逻辑显示呢
来源: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
相似问题