後臺登陸驗證碼添加php
最終樣式。web
分3步(使用原始controller 即site/login登陸) 1 修改model 2修改controller 3修改viewapi
第一步 找到登陸model修改app
尋找site/login 找到$model = new LoginForm(); IDE點擊loginForm跳轉到待修改modelyii
site/login方法以下(原始方法) /** * Login action. * * @return string */ 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(); } else { $model->password = ''; return $this->render('login', [ 'model' => $model, ]); } }
model修改部分post
/** * Login form */ class LoginForm extends Model { public $username; public $password; public $rememberMe = true; public $captcha; private $_user; /** * {@inheritdoc} */ public function rules() { return [ // username and password are both required [['username', 'password'], 'required'], // rememberMe must be a boolean value ['rememberMe', 'boolean'], // password is validated by validatePassword() ['password', 'validatePassword'], ['captcha','required','message'=>'驗證碼不能爲空'], //必須輸入驗證碼 ['captcha','captcha','message'=>'驗證碼不正確'] ]; }
public function attributeLabels() { return [ 'username'=>'用戶名', 'password'=>'密碼', 'rememberMe'=>'記住我', 'captcha' => '驗證碼', ]; }
第二步 sitecontroller修改ui
/** * {@inheritdoc} */ public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'actions' => ['login', 'error','captcha'], 'allow' => true, ], [ 'actions' => ['logout', 'index'], 'allow' => true, 'roles' => ['@'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'logout' => ['post'], ], ], ]; } /** * {@inheritdoc} */ public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], 'captcha'=>[ 'class' => 'yii\captcha\CaptchaAction', 'maxLength' => 4, 'minLength' => 4 , ], ]; }
第三步 view修改this
use yii\captcha\Captcha;
use yii\helpers\Url;
<div class="login-box-body">
<p class="login-box-msg">xxxxx管理平臺</p>
<?php $form = ActiveForm::begin(['id' => 'login-form', 'enableClientValidation' => false]); ?>
<?= $form
->field($model, 'username', $fieldOptions1)
->label(false)
->textInput(['placeholder' => '用戶名']) ?>
<?= $form
->field($model, 'password', $fieldOptions2)
->label(false)
->passwordInput(['placeholder' => '密碼']) ?>
<?= $form->field($model, 'captcha',['options' => ['class' => 'form-group form-group-lg']])
->label(false)
->widget(Captcha::className(), [
'template' => '{input}{image}',
'options' => ['maxlength' => 4, 'style' => 'width: 190px; padding: 5px;', 'placeholder' => '請輸入驗證碼'],
'imageOptions' => ['alt' => '驗證碼','id' => 'login_code', 'src' => '', 'data-api' => Url::toRoute(['site/captcha'], true)],
]) ?>
<div class="row">
<div class="col-xs-8">
<?= $form->field($model, 'rememberMe')
->checkbox() ?>
</div>
<!-- /.col -->
<div class="col-xs-4">
<?= Html::submitButton('登陸', ['class' => 'btn btn-primary btn-block btn-flat', 'name' => 'login-button']) ?>
</div>
<!-- /.col -->
</div>
<?php ActiveForm::end(); ?>
<!-- /.social-auth-links -->
</div>
完工。spa