防止表格重新提交Yii 2

时间:2016-08-09 08:29:19

标签: php yii2 yii2-basic-app

我已经看到了不同的实现,但在我的特定代码$this->refresh();中没有工作,或者我只是不知道在我的情况下把它放在哪里。有人可以帮助我。

以下是我的控制器中的操作。

public function actionIndex()
    {
      // if (!Yii::$app->user->isGuest) {
      //         return $this->goHome();
      //     }
      $model = new LoginForm();

          $model = new LoginForm();
          if (($model->load(Yii::$app->request->post()) && $model->login()) || (!Yii::$app->user->isGuest)) {
              $this->layout = 'userlayout';
            //  $this->refresh();
            return $this->render('mainpage', [
              'model' => $model,
            //return $this->goBack();
            ]);
              //$this->refresh();
        }
          return $this->render('index', [
            'model' => $model,
          ]);
    }

编辑:我根据以下推荐编辑了我的代码,这是完整考验的代码。

  public function actionIndex()
    {
      if (!Yii::$app->user->isGuest) {
          //return $this->goHome();
            $this->redirect('site/main',302);
          // $this->layout = 'userlayout';
          // return $this->render('mainpage');
          }
    //  $model = new LoginForm();

          $model = new LoginForm();
          if ($model->load(Yii::$app->request->post()) && $model->login()) {
            //  $this->layout = 'userlayout';
          //return $this->goBack();
            $this->redirect('site/main',302);//\Yii::$app->urlManager->createUrl("test/show")         $this->redirect('/user/index',302);
          //return $this->render('mainpage');
       }
        //   if (($model->load(Yii::$app->request->post()) && $model->login()) || (!Yii::$app->user->isGuest)) {
        //       $this->layout = 'userlayout';
        //     //  $this->refresh();
        //     return $this->render('mainpage', [
        //       'model' => $model,
        //     //return $this->goBack();
        //     ]);
        //       //$this->refresh();
        // }
          return $this->render('index', [
            'model' => $model,
          ]);

    }

1 个答案:

答案 0 :(得分:0)

我在Yii2基本应用程序中用于登录的逻辑是:

    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        }
        return $this->render('login', [
                    'model' => $model,
        ]);
    }

然后在LoginForm中:

public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();
            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, 'Incorrect username or password.');
            }
        }
    }

    public function login()
    {
        if ($this->validate()) {
            return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
        }
        return false;
    }

    public function getUser()
    {
        if ($this->_user === false) {
            $this->_user = User::findByEmail($this->email);
        }

        return $this->_user;
    }

唯一不同的是我使用User :: findByEmail,而不是默认的,其中信息不是从db中选择的,而是在模型中硬编码。