在 yii2 的controller中添加验证码,而非在model中添加验证码。只要在该控制器中添加actions方法,如下:

  1. class LoginController extends Controller
  2. {
  3. //******
  4. public function actions()
  5. {
  6. return [
  7. 'captcha' => [ //这个就是前端页面的captchaAction。
  8. 'class' => 'yii\captcha\CaptchaAction',
  9. 'height' => 50,
  10. 'width' => 80,
  11. 'minLength' => 4,
  12. 'maxLength' => 4,
  13. ],
  14. ];
  15. }
  16. //*****
  17. }

再到view页面添加验证码,就可以。记得要加use yii\captcha\Captcha;在view页面。核心代码如下:

  1. <div class="page-container">
  2. <p><img src="/ace/images/logo.png" width="350" style="margin-left: -15px;"></p>
  3. <form action="<?= Url::to(['login'])?>" method="post">
  4. <input type="text" name="username" class="username" placeholder="用户名">
  5. <input type="password" name="password" class="password" placeholder="密 码">
  6. <input type="text" name="chechimage" class="username">
  7. <?= Captcha::widget(['name' => 'captchaimg', 'captchaAction' => 'captcha', 'imageOptions' => ['id' => 'captchaimg', 'title' => '换一个', 'alt' => '换一个', 'style' => 'cursor:pointer;margin-left:25px;'], 'template' => '{image}']); ?>
  8. <button type="submit">登 录</button>
  9. <div class="error"><span>+</span></div>
  10. </form>
  11. </div>

在登录的controller里面添加验证:

  1. public function actionLogin()
  2. {
  3. $chechimage = Yii::$app->request->post('chechimage); //这个chcekimage就是前端传过来的
  4. // $code = $this->createAction('captcha')->getVerifyCode();//这样就可以获取到验证码了。
  5. $result = $this->createAction('captcha')->validate($chechimage, false);
  6. if (!$result) {
  7. return $this->reload('验证码错误!');
  8. }
  9. //此后你就可以做用户名和密码的判断什么了
  10. /*当然,在getVerifyCode和validate的时候,yii2都调用了$session->open();注意是否要关掉,我在做的时候,因为要用api,用了第三方passport返回的accessToken做sessionId,所以在验证完后,我调用了Yii::$app->session->close();*/
  11. //Yii::$app->session->close(); //要是你用系统息的sessionId就没有必要关session了。
  12. //******
  13. }

好了,核心代码写完了,有什么

分类: web

标签: