最近看群里问yii2验证码怎么弄的朋友比较多,网站里也有相关教程,不过比较简洁,我想需要来一个详细点的。我把使用Captcha(验证码)分4步:
1、确认有没有处理图片的php扩展库,gd库和imagick库开启一个即可。(这步一般可以略过)yii2通过requirements.php的检查结果

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

2、视图文件设置


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

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

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

['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)