2017-01-16 100 views
1

我嘗試在Yii2 Basic中創建自定義登錄表單,沒有ActiveForm小部件。我製作了一個我想用於登錄的表單,但是,當我嘗試登錄時,它並沒有登錄,只刷新了頁面而沒有nothihng,所以我可能會錯過某些東西或者不喜歡它。我使用電子郵件地址而不是用戶名,並與ActiveForm一起工作,但當我嘗試使其定製有一些問題。自定義登錄表單Yii2基本

這是我想讓我的登錄表單定製:

<div class="login-message"> 
    <h1><?= Html::encode($this->title) ?></h1> 
</div> 

<form method="post"> 
    <div> 
     <span class=""> Email </span> 
     <input value="<?php $model->email ?>" placeholder="Write your email address" type="text"> 
    </div> 
    <div> 
     <span class=""> Password </span> 
     <input value="<?php $model->password ?>" placeholder="Write your password" type="password"> 
    </div> 
    <div class="form-group"> 
     <div> 
      <div class="register"> 
       <?= Html::a(Yii::t("app", "Register"), ["/site/register"]) ?> 

      </div> 
      <br> 
      <div class="forgot-pas"> 
       <?= Html::a(Yii::t("app", "Forgotten password") . "?", ["/site/forgot"]) ?> 
       <br> 
      </div> 
      <br> 
      <div class="login-button"> 
       <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?> 
      </div> 
     </div> 
    </div> 
    <input type="hidden" value="" name="_csrf" > 
</form> 

我在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(); 
    } 
    return $this->render('login', [ 
       'model' => $model, 
    ]); 
} 
+0

是否有你不想使用ActiveForm的原因? – marche

+0

你錯過了''form method =「post」>'中的動作可能是原因 – Ripper

+0

我設置了

同樣的問題@Ripper – RosS

回答

1

你的問題是,你錯過每一個輸入的name。因此,當您嘗試使用$model->load()加載後參數將會失敗。

通常ActiveForm在你的輸入產生這些名字,但是因爲你不想使用它,你就必須自己生成它們:

<div class="login-message"> 
    <h1><?= Html::encode($this->title) ?></h1> 
</div> 

<form method="post"> 
    <div> 
     <span class=""> Email </span> 
     <input name="LoginForm[email]" value="<?php $model->email ?>" placeholder="Write your email address" type="text"> 
    </div> 
    <div> 
     <span class=""> Password </span> 
     <input name="LoginForm[password]" value="<?php $model->password ?>" placeholder="Write your password" type="password"> 
    </div> 
    <div class="form-group"> 
     <div> 
      <div class="register"> 
       <?= Html::a(Yii::t("app", "Register"), ["/site/register"]) ?> 

      </div> 
      <br> 
      <div class="forgot-pas"> 
       <?= Html::a(Yii::t("app", "Forgotten password") . "?", ["/site/forgot"]) ?> 
       <br> 
      </div> 
      <br> 
      <div class="login-button"> 
       <?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?> 
      </div> 
     </div> 
    </div> 
    <input type="hidden" value="" name="_csrf" > 
</form> 

命名您輸入的這種方式遵循同樣的方式的ActiveForm這是因爲您的模型中的load()方法實現爲(默認情況下)加載屬性,如A[b],其中A是模型類名稱,b是屬性名稱。

+0

非常感謝您的答覆和信息! – RosS