yii2.0验证码的两种实现方式

第一种方式:采用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(); ?>

验证码显示:

posted @ 2017-03-06 09:54  py卡卡  阅读(1080)  评论(0编辑  收藏  举报