captcha2 验证码 php,yii2.0-captcha验证码--详细设置

最近看群里问yii2验证码怎么弄的朋友比较多,网站里也有相关教程,不过比较简洁,我想需要来一个详细点的。我把使用Captcha(验证码)分4步:

1、确认有没有处理图片的php扩展库,gd库和imagick库开启一个即可。(这步一般可以略过)yii2通过requirements.php的检查结果

f57284f2a5c490777cea4b7d8b509399.png

yii2会检查开启的这两个库,优先使用imagick库。

aed9ed67c2c1a196cb5d6f651f37462b.png

2、视图文件设置

771b5cff6cdd6145c98a87cc47eff405.png

09ab30d407e4269af0259d13a7524d70.png

如果你是直接在yii2默认控制器SiteController.php渲染的视图,那么上图中captchaAction参数可以不用设置。如果不是,那就必须要指定清楚,因为captchaAction默认site/captcha。如下图:(这个是导致一些朋友验证码出不来的原因)。

8920c2b2434fb55c3b3f69a5f618b5a6.png

3、控制器设置

b4935bf286bda8da1245cf2b68a476eb.pngA框部分,指定验证码的类和fixedVerifyCode刷新固定验证码,

至于fixedVerifyCode的作用,可以参考:http://blog.csdn.net/poly_sunny/article/details/19995801B部分,看了就知道是设置验证码长、宽、高等参数。如果你的yii程序启用了权限控制,还需要设置

419a1482a96543bdaee566038c5a41bc.png

允许验证码对应的action在没有登录的情况下也能被访问(这个是导致一些朋友验证码出不来的原因)。

4、模型设置 和 验证码校验

83a3962a663023cf9b4ebbfc554e2459.png

['verifyCode', 'captcha','captchaAction'=>'/user/security/captcha'],

C :声明模型属性verifyCode为public,既是第2步中的fields的第二个参数值,两者需保持一致。

D :rules中如果正确定义了'captcha'的规则,则验证码的检测比较不需要其他多余代码,model::valide()的时候会自动校验。如果不定义,也可以自己写校验代码:

use yii\captcha\CaptchaValidator;

$caprcha = new CaptchaValidator();

$caprcha->validate($value);

或者

$this->createAction('captcha')->validate( \Yii::$app->request->post( $model->formName() )['verifyCode'], false)