温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用YII2框架怎么实现一个验证码功能

发布时间:2021-04-13 15:43:59 来源:亿速云 阅读:202 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关使用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',         'fixedVerifyCode' => null,         //背景颜色         'backColor' => 0x000000,         //最大显示个数         'maxLength' => 4,         //最少显示个数         'minLength' => 4,         //间距         'padding' => 2,         //高度         'height' => 30,         //宽度         'width' => 85,         //字体颜色         'foreColor' => 0xffffff,         //设置字符偏移量         'offset' => 4,       ],     ];   } }

上述就是小编为大家分享的使用YII2框架怎么实现一个验证码功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI