2017-01-16 8 views
1

J'essaie de créer un formulaire de connexion personnalisé dans Yii2 Basic, sans le widget ActiveForm. J'ai fait le formulaire que je veux utiliser pour la connexion, mais, quand j'essaie de me connecter, il ne se connecte pas seulement rafraîchir la page sans nothihng, alors peut-être que je manque quelque chose ou ne pas faire comme il se doit. J'utilise l'adresse e-mail au lieu du nom d'utilisateur, et avec ActiveForm tout fonctionne mais quand j'essaie de le personnaliser il y a un problème.Formulaire de connexion personnalisé Yii2 Basic

Ceci est mon formulaire de connexion que je veux faire la coutume:

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

Mon action SiteController pour la connexion:

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

Y a-t-il une raison pour laquelle vous ne voulez pas utiliser ActiveForm? – marche

+0

vous manquez d'action dans '

' pourrait être la raison – Ripper

+0

Je règle même problème @Ripper – RosS

Répondre

1

Votre problème est que vous manque le name de chaque entrée. Pour cette raison, lorsque vous essayez de charger les paramètres de poste en utilisant $model->load() échouera.

Habituellement ActiveForm génère ces noms dans vos entrées, mais parce que vous ne voulez pas l'utiliser, vous devrez les générer vous-même:

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

Cette façon de nommer vos entrées suit la même manière ActiveForm le fait, car la méthode load() de votre modèle est implémentée pour (par défaut) charger des attributs comme A[b] où A est le nom de classe du modèle et b est le nom de l'attribut.

+0

travaillé vraiment merci pour la réponse et pour l'information! – RosS