Yii2自带验证码使用,不显示,验证码权限问题,验证码刷新,已测试

时间: 2017-02-11  分类: Yii2  收藏

Yii2自带验证码使用详细例子,测试了好久,终于弄成了,可以自由控制验证码图片的样式,css样式,验证码输入框属性调整,验证码手动校验或自动校验
Yii2自带验证码, 可以直接就使用, 头一次用弄了老长时间,总算可以随意用了,
 

1.控制器controller
在要使用验证码的控制器controller里面重写方法actions(),有的控制器里默认重写了,不要重复

/**
 * @inheritdoc
*/
public function actions()
{
    return [
         ’captcha’ => [
                ’fixedVerifyCode’ => YII_ENV_TEST ? ’testme’ : null,
                ’maxLength’ => 4, //最大显示个数
                ’minLength’ => 4,//最少显示个数
                //’backColor’=>’#f7feec’,//背景颜色
                //’foreColor’=>0xffffff,     //字体颜色
                //’padding’ => 5,//间距
                ’height’=>30,//高度
                ’width’ => 70,  //宽度
                //’offset’=>4,        //设置字符偏移量 有效果
         ],
     ];
 }

2.模型model
假如是一个登陆表单。这里只给出验证码相关的部分。

class LoginForm extends Model
{
    public $verifyCode; //此成员变量必须要有
     
    public function rules()
    {
        return [
            [’verifyCode’, ’required’],
            [’verifyCode’, ’captcha’],
        ];
    }
}

验证规则里面验证码的验证器是captcha
可以在函数attributeLabels中添加前台页面中验证码的字段名称, 这里我设定为空值,在视图中控制名称更自由

public function atrributeLabels(){
    return [’verifyCode’=>’验证码’, ];
}

3.视图view
captchaAction 指定captcha所在的控制器路径,默认是‘site/captcha’,不换到指定位置的话,很容易,验证码就显示不出来。
imageOptions设定验证码图片的参数,例如 手势,提示等等
options设定验证码输入框的样式,如maxlength,class等

<?= $form->field($model, ’verifyCode’,[’options’=>[’class’=>’verify’]])->widget(yii\captcha\Captcha::className(), [’captchaAction’=>’site/captcha’,’imageOptions’=>[’id’=>’verifyimg’,’class’=>’verifyimg’,’title’=>’看不清?点击更换’],’options’=>[’id’=>’verifycode’,’class’=>’verifycode’,’maxlength’=>’4’],’template’=>’{input}{image}’,]) ?>

验证码,生成和验证的整个流程就完成了。

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

((new yii\captcha\CaptchaValidator)->validate($value))    //验证通过会返回1,否则返回空,$value为输入的验证码值,


验证码不显示问题,
这里有说两个,一个是 captchaAction 一个是权限,
权限, 我用的是高级模板,在后台siteController中behaviors方法中加上captcha的权限,即游客可访问,
这里的权限一定注意,比如你用提是后台登陆验证码,默认是未登陆状态,不能另到logout那里,具体可搜索access的资料
再有一点是config/main.php文件里不要再加access的规则, 加上后会覆盖控制器里的规则,造成如下的规则失效,

            ’access’ => [
                ’class’ => AccessControl::className(),
                ’rules’ => [
                    [
                        ’actions’ => [’login’,’error’,’captcha’],
                        ’allow’ => true,
                    ],
                    [
                        ’actions’ => [’logout’, ’index’],
                        ’allow’ => true,
                        ’roles’ => [’@’],
                    ],
                ],
            ],
还有一个是 captchaAction, 这个有个默认值是site/captcha,具体加在models里,一般情况下路径很容易设置, 在那个控制器就: 控制器/captcha就行了,

验证码刷新
yii2的验证码是可以直接点击刷新的,如果实在不能刷新,有个思路如下,具体没有实验

先访问site/captcha?refresh刷新验证码,
然后再重新访问site/captcha验证码就会刷新,分两步,当然报后面加上?48949489随机数

分享到:

评论

昵 称: