2017-01-16 5 views
1

私はActiveFormウィジェットなしで、Yii2 Basicでカスタムログインフォームを作ろうとしています。私はログインのために使用したいフォームを作ったが、ログインしようとするとnothihngを使わずにページをリフレッシュするだけなので、何かが恋しい、あるいは嫌いになるかもしれない。私はusernameの代わりに電子メールアドレスを使用し、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

あなたは '

'でアクションを見逃しています – 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