自定义登录表单 Yii2 Basic
Custom login form Yii2 Basic
我尝试在没有 ActiveForm 小部件的情况下在 Yii2 Basic 中制作自定义登录表单。我制作了我想用于登录的表格,但是,当我尝试登录时,它没有登录,只刷新页面而没有任何东西,所以也许我错过了一些东西或者没有像它应该的那样做。我使用电子邮件地址而不是用户名,使用 ActiveForm 一切正常,但是当我尝试自定义时出现了一些问题。
这是我要自定义的登录表单:
<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,
]);
}
您的问题是您缺少每个输入的 name
。因此,当您尝试使用 $model->load()
加载 post 参数时,将会失败。
通常 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 是模型classname 和 b 是属性名称。
我尝试在没有 ActiveForm 小部件的情况下在 Yii2 Basic 中制作自定义登录表单。我制作了我想用于登录的表格,但是,当我尝试登录时,它没有登录,只刷新页面而没有任何东西,所以也许我错过了一些东西或者没有像它应该的那样做。我使用电子邮件地址而不是用户名,使用 ActiveForm 一切正常,但是当我尝试自定义时出现了一些问题。
这是我要自定义的登录表单:
<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,
]);
}
您的问题是您缺少每个输入的 name
。因此,当您尝试使用 $model->load()
加载 post 参数时,将会失败。
通常 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 是模型classname 和 b 是属性名称。