页面怎么不会按照逻辑显示呢

来源: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回答

Jason

2017-05-22

回来了吗,回来了叫我

0
3
慕慕7355481
非常谢谢老师,吾将上下而求索
2017-05-22
共3条回复

Jason

2017-05-22

还是老样子?session也换成setflash还是老样子吗

0
6
慕慕7355481
回复
Jason
我先去吃饭了哈
2017-05-22
共6条回复

Jason

2017-05-22

另外尽量使用 setFlash()和getFlash()方法

0
1
慕慕7355481
您是说session后使用这两个吧,明白啦,谢谢哦
2017-05-22
共1条回复

Jason

2017-05-22

把refresh去掉就可以了

0
1
慕慕7355481
我去掉了,但还是老样子。
2017-05-22
共1条回复

Yii2.0开发一个仿京东商城平台

【毕设】购物、下单、支付、收货...各功能模块开发,打造京东式电商平台

1543 学习 · 655 问题

查看课程