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随机数