2016-08-09 8 views
0

私はこれについて異なる実装を見たことがありますが、私の特定のコード$this->refresh();で動作しないか、多分私はどこに私の場合にそれを置くのか分からない。誰かが私を助けることができる?フォームの再送信を防止するYii 2

ここは私のコントローラの動作です。

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

    } 
+0

論理の最終目標は何か教えてください。 – g9m29

+0

これは通常のログインフォームです。それは、yiiは私が持っていないテーブルの特定の列を必要とするためです。ここでのロジックは、ログインフォーム>ログイン後にメインページを表示>ユーザーがページを更新しようとすると、再送のプロンプトが表示されます(これを削除したいと思います)。 – user827391012

+0

別のページに誘導し、フォームの再送信を取り除くログインを実装するためのより良い方法がある場合は、それも高く評価されます。 – user827391012

答えて

0

私は私のYii2基本的なアプリにログインするために使用されるロジックはこれです:異なっている唯一のことは、私ということです

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; 
    } 

:LoginFormで

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

そして、 User :: findByEmailを使用してください。デフォルトの情報ではなく、dbから選択されず、モデルでハードコードされています。

+0

'if($ model-> load(Yii :: $ app-> request-> post())&& $ model-> login()){ return $ this-> goBack(); }「インデックスに戻ってほしくない場合はどうすればいいですか?他のページにリダイレクトしたいのですか? – user827391012

+0

$ this-> redirect( '/ contorller/action'、302)を返すだけです。これはYiiのデフォルトのリダイレクト機能です。 – g9m29

関連する問題