在我的项目中,有一个登录页面,最初只有一种登录方式:通过手机号登录。那时候,我是这样做的。
控制器里的action代码如下:
/**
* 用户登录的操作
*/
public function actionLogin() {
$this->layout = 'base';
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->redirect(['site/index']);
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
视图文件的关键代码如下:
<?php $form = ActiveForm::begin([
'enableClientValidation' => false,
]); ?>
<?= $form->field($model, 'phone', [
'options' => [
'class' => 'form-group form-group-lg'
],
'inputTemplate' => '<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-phone"></i></span>{input}</div>',
])->label(false)->error(false) ?>
<?= $form->field($model, 'code', [
'options' => [
'class' => 'form-group form-group-lg'
],
'inputTemplate' => '<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>{input}<span class="input-group-btn"><button id="send-sms-btn" class="btn btn-default btn-lg" type="button">发送验证码</button></span></div>'
])->label(false)->error(false) ?>
<?= $form->field($model, 'remember')->checkbox() ?>
<div class="form-group form-group-lg">
<?= Html::submitButton('登录', ['class' => 'btn btn-default btn-lg btn-block']) ?>
</div>
<?php ActiveForm::end(); ?>
还有一个model类(MobileLoginForm)我就不贴代码了。
但现在需求改变了,要加一种登录方式:使用用户名和密码登录。
在布局上,我使用了两个选项卡来做,每个选项卡里使用一个表单,也就是在这个登录页面出现了两个表单,自然就又多了一个对应的model类( AccountLoginForm)。
但随即问题就出现了,我不知道怎么在一个页面里使用两种 model 类。
所以还请大家指教下,谢谢!
我觉得这样最简洁:
一个页面使用两个ActiveForm, 分别指定不同的action
(html中form的属性)提交到不同的Action(Controller下的一个方法)
没有办法,最后还是改为了通过 ajax 来进行两种方式的登录。