2015-10-20 71 views
4

我目前正在使用Yii2框架。 在登录页面中,当我登录失败时,它只刷新视图,但不显示错误。 这里是我当前视图:登录失败时没有错误信息Yii2

<?php 
use yii\helpers\Html; 
use yii\bootstrap\ActiveForm; 

/* @var $this yii\web\View */ 
/* @var $form yii\bootstrap\ActiveForm */ 
/* @var $model \common\models\LoginForm */ 

//$this->title = 'Welcome to my site'; 
//$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="site-login"> 
    <h1><?= Html::encode($this->title) ?></h1> 
    <div class="row"> 
     <div class="col-xs-12 col-sm-12 col-md-5 col-lg-4"> 
      <div class="well no-padding"> 
       <?php $form = ActiveForm::begin(["id"=>"login-form", "options"=>["class"=>"smart-form client-form"]]); ?> 
        <header> 
         Sign In 
        </header> 

        <fieldset>         
         <section> 
          <label class="label">User</label> 
          <label class="input"> <i class="icon-append fa fa-user"></i> 
           <input type="text" name="LoginForm[username]"> 
           <b class="tooltip tooltip-top-right"><i class="fa fa-user txt-color-teal"></i> Escribe tu Usuario</b></label> 
         </section> 

         <section> 
          <label class="label">Contraseña</label> 
          <label class="input"> <i class="icon-append fa fa-lock"></i> 
           <input type="password" name="LoginForm[password]"> 
           <b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> Type your Password</b> </label> 
          <div class="note"> 
           <a href="forgotpassword.html">Forgot your password?</a> 
          </div> 
         </section> 

         <section> 
          <label class="checkbox"> 
           <input id="rememberMe" type="checkbox" name="LoginForm[rememberMe]"> 
           <i></i>Remember Me 
          </label> 
         </section> 

        </fieldset> 
        <footer> 
         <button type="submit" class="btn btn-primary"> 
          Entrar 
         </button> 
        </footer> 
       <?php $form = ActiveForm::end(); ?> 

      </div> 
     </div> 
    </div> 
</div> 

<script type="text/javascript"> 
$(function() { 
    $('#rememberMe').on('change', function(e) { 
    e.stopPropagation(); 
    this.value = this.checked ? 1 : 0; 
    }); 
}) 
</script> 

在SiteController:

... 
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(); 
     } else { 
      return $this->render('login', [ 
       'model' => $model, 
      ]); 
     } 
    } 
... 

无需花哨的东西在这里,只是要提醒打字不对劲,用户名或密码的用户。

回答

0

这是你的代码不正是

$model = new LoginForm(); // create e new model for login 

    // check for the data provided: $model->load(Yii::$app->request->post()) == true 
    // and 
    // if the data are right: $model->login() == true 
    // then ->goBack() 
    if ($model->load(Yii::$app->request->post()) && $model->login()) { 
     return $this->goBack(); 

    // otherwise : no data provided or login incorrect 
    // return the render of the login page 
    } else { 
     return $this->render('login', [ 
      'model' => $model, 
     ]); 
    } 

如果你想有一个不同的行为,只需要提供正确的代码。例如:没有提供数据呈现登录页面,但是如果提供登录数据但不正确呈现警告页面并在呈现登录页面后

+0

我的想法是渲染错误在同一个登录页面... –

+0

在这种情况下,你需要知道是第一次尝试还是第二次尝试是由错误引起的。更改您的LoginForm模型添加您需要的字段并在控制器/操作中分配适当的值 – scaisEdge

+0

我可以只使用Flash消息吗? –

1

如果您想要flash消息,请尝试此操作。在控制器

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(); 
     } else { 
      Yii::$app->session->setFlash('failure', "incorrect username or password"); 
      return $this->render('login', [ 
       'model' => $model, 
      ]); 
     } 
    } 

鉴于添加此代码与您现有的代码一起

<?php if (Yii::$app->session->hasFlash('failure')): ?> 
      <div class="alert alert-danger alert-dismissable"> 
       <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button> 
       <h4><i class="icon fa fa-times"></i> Error!</h4> 
       <?= Yii::$app->session->getFlash('failure') ?> 
      </div> 
      <?php endif; ?> 
1
public function actionLogin() 
{ 
    if (!Yii::$app->user->isGuest) { 
     return $this->goHome(); 
    } 

    $model = new LoginForm(); 
    if ($model->load(Yii::$app->request->post())) {    
     if ($model->login()) {     
      return $this->goBack(); 
     } else { 
      Yii::$app->session->setFlash('error', 'Invalid login details.'); 
     }    
     return $this->refresh(); 
    } else { 
     return $this->render('login', [ 
      'model' => $model, 
     ]); 
    } 
} 
+0

还没有测试过这个代码,但是这个答案并没有把'$ model-> load(Yii :: $ app-> request-> post())'和'$ model-> login()所以你可以检测失败的登录尝试。 – johnsnails

相关问题