Yii 2.0 使用验证码

Yii2.0 提供了验证码组件。调用起来比较方便。以登录页面添加验证码为例。

1. 模型中添加字段和验证规则。

common\models\LoginForm

添加如下代码

public $captcha;

//rules() 方法内添加
[‘captcha‘, ‘required‘],
[‘captcha‘, ‘captcha‘],

2. 控制器中添加captcha的action

backend\controllers\SiteController

    public function actions()
    {
        return [
            ‘error‘ => [
                ‘class‘ => ‘yii\web\ErrorAction‘,
            ],
            // 新添加的
            ‘captcha‘ => [
                ‘class‘ => ‘yii\captcha\CaptchaAction‘,
            ],
        ];
    }    

3. 视图中引入验证码widget

\backend\views\site\login.php

use yii\captcha\Captcha;

<?= $form->field($model, ‘captcha‘)->widget(Captcha::className()) ?>

需要注意的是这个widget包含了一个显示图片的img标签和一个输入验证码的文本框。 比较丑。可以稍微调整

<?= $form->field($model, ‘captcha‘)->widget(Captcha::className(),[‘options‘ => [
                        ‘placeholder‘ => ‘请输入上方显示的字母‘
                            ,‘class‘ => ‘form-control‘
                            ,‘style‘ => ‘margin-top:10px;‘
                    ]])->label(false); ?>

注意事项:

1. 图片访问地址是/site/captcha?v=5538ed905b396,但显示的是个叉叉。

有可能地址被限制访问了。在site控制中的behaviors,将captcha动作加入到可访问列表中

    public function behaviors()
    {
        return [
            ‘access‘ => [
                ‘class‘ => AccessControl::className(),
                ‘rules‘ => [
                    [                       // 加入captcha,使其可访问/site/captcha
                        ‘actions‘ => [‘login‘, ‘error‘,‘captcha‘],
                        ‘allow‘ => true,
                    ].........
                ],
            ],
        ];
    }

2. 点击图片不刷新新的验证码

查看下是否加载了yii.js ,yii.valiadation.js ,yii.captcha.js等yii的asset包

如果没有,应该是该视图对应的layout问题,尝试在$content上下加入<?php $this->beginBody() ?>和<?php $this->endBody() ?>。

时间: 2024-12-15 19:13:47

Yii 2.0 使用验证码的相关文章

Yii Framework2.0开发教程(8)输入验证

validate() 方法,在幕后为执行验证操作.先看一个简单的例子,例子的代码在<Yii Framework2.0开发教程(2)使用表单Form>. 类ZhyoulunController中函数actionEntry() ,其中有一句$model->validate(),就是来判断输入的名字和电子邮件是否正确. 修改models/EntryForm.php <?php namespace app\models; use yii\base\Model; class EntryFor

[Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如果有理解不当敬请指正,欢迎大家把自己的方法拿出来分享.我们希望被引入的类应该达成一下两点: 在应用中的任这里输入代码意位置可以使用该类名或命名空间,而不用显式调用require()/include(). 利用Yii的autoloader,仅在类被调用时加载,以遵循Yii按需加载的原则,节省资源. 我

Yii Framework2.0开发教程(5)数据库mysql性能

继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了一个统一的 API 并且克服了许多不同的 DBMS 违禁使用. Yii 默认支持下面 DBMS : MySQL MariaDB SQLite PostgreSQL CUBRID: version 9.1.0 or higher. Oracle MSSQL: version 2012 或更高版本号,如需使用 L

Yii Framework2.0开发教程(5)数据库mysql函数

继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给一些关于yii2数据库支持的介绍 Yii 基于 PHP's PDO建立了一个成熟的数据库访问层.它提供统一的 API 并解决了一些不同 DBMS 产生的使用不利. Yii 默认支持以下 DBMS : MySQL MariaDB SQLite PostgreSQL CUBRID: version 9.1.0 or higher. Oracle MSSQL: version 2012 或更高版本,如需使用 LIMIT

使用nginx部署Yii 2.0\yii-basic-app-2.0.5

nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024;} http { include mime.types; default_type application/octet-s

Yii框架2.0的 验证码

最近看了一个Yii的教程视频,是按1.1的版本讲的,我想用Yii2.0的框架也参考他的学习开发下,结果发现好多不一样的,现在就说说验证码的事 首先加入一个actions 做验证码图片的显示,实际事调用了 CaptchaActive 类 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'height' => 25, 'width' => 80, 'm

YII 1.0 验证码

public function actions(){ return array ( ‘captcha’=> array( ‘class’=> ‘CCatpchaAction’, ‘height’=> 25, ‘width’=>80, ‘minLength’=>4, ‘maxLength’=>4 ) ); 在视图中:(1)普通写法:<?php $this->widget('CCaptcha')?>(2)带有点击刷新:<?php $this->

Yii2.0自定义验证码

第一步,控制器: 在任意controller里面重写方法 第二步,表单模型: 这里只给出验证码相关的部分. 验证规则里面验证码的验证器是captcha. 第三步,视图: 用ActiveForm生成对应字段. captchaAction参数指定第一步是在写在哪里的,默认是site里面. 验证码,生成和验证的整个流程就完成了. 以上是生成验证码的流程,因为验证码数字是在代码中写死的,如果我们需要数字的话,那该怎么办呢? 很好办,我们可以自己写个类来继承CaptchaAction,重写generate

YII 2.0 Bad Request (#400)

post提交表单的时候出现在这个错误是因为Yii2.0默认开启了_crsf的验证 可以在控制器里局部禁用 public $enableCsrfValidation = false ->覆盖父类的属性 也可以在配置文件中全局禁用  'components' => [         'request' => [             /**             /*!!! insert a secret key in the following (if it is empty) -