第一种方式:采用model

1. 模型:Code.php

<?php
namespace app\models;

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

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

    ];
  }
}

控制器:DemoController.php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;

class DemoController extends Controller
{
  public function actions()
  {
    return [
      'captcha' => [
      'class' => 'yii\captcha\CaptchaAction',
      'maxLength' => 4,
      'minLength' => 4,
      'width' => 80,
      'height' => 40,
      ],
    ];
  }
  public function actionCode()
  {
    $model = new \app\models\Code();
    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 \yii\helpers\Html;
?>
<?= Html::beginForm('', 'post', ['class' => 'form']);?>
<?=\yii\captcha\Captcha::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 app\controllers;
use Yii;
use yii\web\Controller;

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

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

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

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

视图:
<?php
use \yii\helpers\Html;
?>
<?= Html::beginForm('', 'post', ['class' => 'form']);?>
<?=\yii\captcha\Captcha::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(); ?>

验证码显示:

yii2.0验证码的两种实现方式的更多相关文章

  1. css中两种居中方式text-align:center和margin:0 auto 的使用场景

    关于使用text-align:center和margin:0 auto 两种居中方式的比较 前言:最近由于要学习后端,需要提前学习一部分前端知识,补了补css知识,发现狂神在讲这一部分讲的不是特别清楚 ...

  2. iOS活动倒计时的两种实现方式

    代码地址如下:http://www.demodashi.com/demo/11076.html 在做些活动界面或者限时验证码时, 经常会使用一些倒计时突出展现. 现提供两种方案: 一.使用NSTime ...

  3. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  4. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  5. struts2+spring的两种整合方式

    也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...

  6. easyui datagride 两种查询方式

    easyui datagride 两种查询方式function doReseach() { //$('#tt').datagrid('load', { // FixedCompany: $('.c_s ...

  7. PlaceHolder的两种实现方式

    placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 <input typ ...

  8. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  9. 第一章 Mybtais的两种启动方式

    Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...

随机推荐

  1. 实在解决不了丢失vs2019之类的msvcr110.dll之类的问题

    因为msvcr110.dll也是微软DirectX的一个组件 如果在下载VC运行库没用的情况下,可能是因为要运行的程序是win32的,但是电脑和下载的程序是64的,所以 下载一个win32的即可 如果 ...

  2. 封装APP之详解

    一.什么是封装APP 封装APP又称Web APP,Web APP即是一种框架型APP开发模式(HTML5 APP 框架开发模式),该开发方式拥有跨平台的优势,该模式通常由"HTML5云网站 ...

  3. 框架-SPI四种模式+通用设备驱动实现

    目录 前言 笔录草稿 SPI介绍 SPI四种模式 ** SPI 驱动框架 ** 框架 前言 SPI 介绍为搜集百度资料+个人理解 其余为原创(有误请指正) 集四种模式于一身 笔录草稿 SPI介绍 SP ...

  4. 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性

    对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...

  5. Learn day8 re正则表达式\search函数\反射\tcp发送消息(循环)\udp发送消息

    1.匹配单个字符 # ### 正则表达式 - 单个字符匹配 import re ''' findall 把匹配的结果直接返回到列表中 lst = re.findall("正则表达式" ...

  6. 不能再被问住了!ReentrantLock 源码、画图一起看一看!

    前言 在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源.释放资源都是交给子类实现的,那子类是怎么 ...

  7. 直播APP源码是如何实现音视频同步的

    1.  音视频同步原理 1)时间戳 直播APP源码音视频同步主要用于在音视频流的播放过程中,让同一时刻录制的声音和图像在播放的时候尽可能的在同一个时间输出. 解决直播APP源码音视频同步问题的最佳方案 ...

  8. C# 9.0 正式发布了(C# 9.0 on the record)

    翻译自 Mads Torgersen 2020年11月10日的博文<C# 9.0 on the record> [1],Mads Torgersen 是微软 C# 语言的首席设计师,也是微 ...

  9. 你的旧版本 App 为何运行在 iPhone 12 上没有异常?

    背景 当我在 10月14日 iPhone 12 系列发布直播,看到 iPhone 12 系列的分辨率后,我注意到这些分辨率是全新的时,我立即在群里吐槽:又需要适配一波了.我只是以为宽高变化会导致字号变 ...

  10. acm一些小细节/技巧

    以后没有终止信号的输入统一用 : while(cin>>a) { ... } "1" 不是质数, 要注意.  当需要把一个数组中的数值初始化成正无穷时,为了避免加法算术 ...