• 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(); ?>

    验证码显示:

  • 相关阅读:
    JS学习笔记ZT
    一条经典的汇总的sql
    sql 日期的转换
    微软.net安装失败时出现的问题
    sql 换行
    js 代码
    学习笔记
    decimal 的使用
    功能最完善,代码最简洁的选项卡代码(div+css)
    sql字母排序
  • 原文地址:https://www.cnblogs.com/l-zl/p/6508532.html
Copyright © 2020-2023  润新知