1. 程式人生 > 程式設計 >YII2框架中驗證碼的簡單使用方法示例

YII2框架中驗證碼的簡單使用方法示例

本文例項講述了YII2框架中驗證碼的簡單使用方法。分享給大家供大家參考,具體如下:

驗證碼的使用是比較頻繁的。YII2中已經幫我們做好了封裝。

首先我們在控制器裡建立一個actions方法,用於使用yii\captcha\CaptchaAction

<?php

namespace app\controllers;

use YII;
use yii\web\Controller;

class IndexController extends Controller
{
  public function actionIndex()
  {
    if (YII::$app->request->isPost) {
      //獲取post過來的驗證碼
      $verify = YII::$app->request->post('verify');

      //我們手動進行驗證,第二個引數表示是否區分大小寫
      if ($this->createAction('captcha')->validate($verify,false)) {
        echo '成功';
      } else {
        echo '失敗';
      }

    } else {
      return $this->renderPartial('index');
    }
  }

  //actions的作用主要是共用功能相同的方法
  //當用戶訪問index/captcha時,actions就會呼叫yii\captcha\CaptchaAction方法
  public function actions()
  {
    return [
      'captcha' => [
        'class' => 'yii\captcha\CaptchaAction','fixedVerifyCode' => null,//背景顏色
        'backColor' => 0x000000,//最大顯示個數
        'maxLength' => 4,//最少顯示個數
        'minLength' => 4,//間距
        'padding' => 2,//高度
        'height' => 30,//寬度
        'width' => 85,//字型顏色
        'foreColor' => 0xffffff,//設定字元偏移量
        'offset' => 4,],];
  }
}

顯示頁面程式碼如下:

<?php
use yii\helpers\Url;
use yii\helpers\Html;
?>
<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>分頁顯示</title>
</head>
<body>
  <form action="<?php echo Url::toRoute('index/index'); ?>" method="post">
    驗證碼:<input type="text" name="verify"><br>
    <img id="verifyImg" src="<?php echo Url::toRoute('index/captcha'); ?>"><br>
    <input type="submit" value="提交">
    <input name="_csrf" type="hidden" value="<?php echo \Yii::$app->request->csrfToken; ?>">
  </form>

  <?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?>
  <script type="text/javascript">
    $(function () {
      //處理點選重新整理驗證碼
      $("#verifyImg").on("click",function () {
        $.get("<?php echo Url::toRoute('index/captcha') ?>?refresh",function (data) {
          $("#verifyImg").attr("src",data["url"]);
        },"json");
      });
    });
  </script>
</body>
</html>

演示結果如下:

YII2框架中驗證碼的簡單使用方法示例

上面控制器中驗證碼的驗證方式是我們手動的。我們也可以建立一個模型配置rules()來自動完成。

<?php

namespace app\models;

use yii\base\Model;

class VerifyForm extends Model
{

  //變數名為你表單中輸入驗證碼控制元件的name
  public $verify;

  public function rules()
  {
    return [
      ['verify','required','message' => '請填寫驗證碼'],//注意captchaAction的設定,指向你顯示驗證碼的action,這裡我們的是index/captcha
      ['verify','captcha','captchaAction' => 'index/captcha','caseSensitive' => false,'message' => '驗證碼錯誤'],];
  }
}

控制器程式碼修改如下:

<?php

namespace app\controllers;

use YII;
use app\models\VerifyForm;
use yii\web\Controller;

class IndexController extends Controller
{
  public function actionIndex()
  {
    if (YII::$app->request->isPost) {
      $verify = new VerifyForm();
      $verify->load(YII::$app->request->post(),'');

      //自動驗證
      if ($verify->validate()) {
        echo '成功';
      } else {
        var_dump($verify->errors);
      }

    } else {
      return $this->renderPartial('index');
    }
  }

  //actions的作用主要是共用功能相同的方法
  //當用戶訪問index/captcha時,actions就會呼叫yii\captcha\CaptchaAction方法
  public function actions()
  {
    return [
      'captcha' => [
        'class' => 'yii\captcha\CaptchaAction',];
  }
}

更多關於Yii相關內容感興趣的讀者可檢視本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向物件程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家基於Yii框架的PHP程式設計有所幫助。