douzi7711 2016-08-09 08:29
浏览 76
已采纳

防止表格重新提交Yii 2

I have seen different implementation about this but in my particular code $this->refresh(); doesn't work or maybe I just do not know where to put it in my case. Can someone help me.

Here is the action in my controller.

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,
          ]);
    }

EDIT: I have edited my code based on the recommendation below, this is the code of the full ordeal.

  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条回答 默认 最新

  • douqi1212 2016-08-09 12:36
    关注

    The logic I used for login in my Yii2 basic app is this:

        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,
            ]);
        }
    

    And then in the 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;
        }
    

    The only thing that is different is that I use User::findByEmail and not the default one where the information is not selected from db but instead hardcoded in the model.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘