zoukankan      html  css  js  c++  java
  • yii2.0验证码的两种实现方式

    第一种方式:采用model

    1. 模型:Code.php

    <?php
    namespace appmodels;

    use yiiaseModel;
    class Code extends Model
    {
      public $code;//添加的验证码字段

      public function rules()
      {
        return [
          //captchaAction 是生成验证码的控制器
          ['code', 'captcha', 'captchaAction' => 'demo/captcha', 'message' => '验证码不正确'],

        ];
      }
    }


    控制器:DemoController.php
    <?php
    namespace appcontrollers;
    use Yii;
    use yiiwebController;

    class DemoController extends Controller
    {
      public function actions()
      {
        return [
          'captcha' => [
          'class' => 'yiicaptchaCaptchaAction',
          'maxLength' => 4,
          'minLength' => 4,
          'width' => 80,
          'height' => 40,
          ],
        ];
      }
      public function actionCode()
      {
        $model = new appmodelsCode();
        if(Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
        if($model->valodate) {//验证
          echo '验证成功';
        } else{
          //失败
          var_dump($model->getErrors());
        }
      }
      return $this->render('code', ['model' => $model]);
    }
    }

    HTML :code.php
    <?php
    use yiihelpersHtml;
    ?>
    <?= Html::beginForm('', 'post', ['class' => 'form']);?>
    <?=yiicaptchaCaptcha::widget([
      'model' =>$model,   //Model
      'attribute' => 'code',   //验证码的字段
      'captchaAction' => 'demo/captcha',   //验证码的action 与 Model是对应的
      'template' => '{input}{image}',   //模板,可以自定义
      'options' => ['id' => 'input'],   //input的HTML属性配置
      'imageOptions' => ['alt' => '点击刷新验证码'],   //image的HTML属性配置
    ])?>
    <?=Html:submitButton('提交', ['class' => 'submit'])?>
    <?php ActiveForm::end(); ?>

    验证码显示:

    第二种方式: 不采用model

    2. 控制器:

    <?php
    namespace appcontrollers;
    use Yii;
    use yiiwebController;

    class DemoController extends Controller
    {
      public function actions()
      {
        return [
          'captcha' => [
          'class' => 'yiicaptchaCaptchaAction',
          'maxLength' => 4,
          'minLength' => 4,
          'width' => 80,
          'height' => 40,
          ],

        ];
      }
      public function actionCodeTwo(){
        if(Yii::$app->request->isPost) {//验证验证码
        $code = $_POST['code'];
        //实例化一个验证码验证对象
        $cpValidate = new yiicaptchaCaptchaValidator();
        //配置action为当前的
        $cpValidate->captchaAction = 'demo/captcha';
        //创建一个验证码对象
        $cpAction = $cpValidate->createCaptchaAction();
        //读取验证码
        $scode = $cpAction->getVerifyCode();
        if($code == $scode) {  

          echo ‘正确’;
        }else{
           echo '错误';
        }

        return $this->render('code');
    }

    视图:
    <?php
    use yiihelpersHtml;
    ?>
    <?= Html::beginForm('', 'post', ['class' => 'form']);?>
    <?=yiicaptchaCaptcha::widget([
      'name' => 'code',
      'captchaAction' => 'demo/captcha', //验证码的action 与 Model是对应的
      'template' => '{input}{image}', //模板,可以自定义
      'options' => ['id' => 'input'], //input的HTML属性配置
      'imageOptions' => ['alt' => '点击刷新验证码'], //image的HTML属性配置
    ])?>
    <?=Html:submitButton('提交', ['class' => 'submit'])?>
    <?php ActiveForm::end(); ?>

    验证码显示:

  • 相关阅读:
    U1. 广度优先搜索(BFS)和 广度优先搜索(DFS)
    C5. Spring 服务的注册与发现(Spring Cloud Eureka)
    S3. Android 消息推送
    S2. Android 常用控件
    S12. Android 检查更新功能实现
    S1. Android 功能大全
    B9 Concurrent 重入锁(ReentrantLock)
    117.dom2事件
    106.事件的传播机制
    105.事件对象及兼容处理
  • 原文地址:https://www.cnblogs.com/l-zl/p/6508532.html
Copyright © 2011-2022 走看看