Yii2.0的自带的验证依赖于GD2或者ImageMagick扩展。
使用步骤如下:
重写yiiwebController::actions()
方法,用ID"captcha"注册一个CaptchaAction类的action。
在表单模型里面添加一个属性,用来保存用户输入的验证码字符串;这个属性的验证器是"captcha"。
在视图里面,把yiicaptchaCaptcha Widget
插入到表单里面。
第一步,控制器:
在任意controller里面重写方法
代码语言:javascript复制/** * @inheritdoc */
public function actions()
{
return [
'captcha'=>[
'class'=>'yiicaptchaCaptchaAction',
'maxLength'=>5,
'minLength'=>5,
'height' => 50,
'width' => 80,//这里可以设置宽和高,但是如果视图中有style,就会覆盖此处的宽和高
]
];
}
第二步,表单模型:
这里只给出验证码相关的部分。
代码语言:javascript复制 public $verifyCode;
/**
* @inheritdoc
*/
public function rules()
{
return [
['verifyCode','required'],
['verifyCode','captcha']
];
}
验证规则里面验证码的验证器是captcha。
第三步,视图:
用ActiveForm生成对应字段。其中field()中的verifyCode是模型中的成员变量
代码语言:javascript复制<?php $form=ActiveForm::begin();?>
<?= $form->field($searchModel, 'verifyCode', [
'options' => ['class' => 'form-group form-group-lg'],
])->widget(Captcha::className(),[
'template' => '<div class="row"><div class="col-md-3 col-sm-3 mr20">{image}</div><div class="col-md-3 col-sm-3 mr20">{input}</div></div>',
'imageOptions' => ['alt' => '验证码','style'=>'cursor:pointe'],
] ) ?>
<?php ActiveForm::end();?>
验证码,生成和验证的整个流程就完成了。
运行结果如下:其中Verify Code是widget的名字,可以通过label()方法修改
也可以在注册提交的控制器修改
代码语言:javascript复制public function attributeLabels()
{
return [
'username' => '用户名',
//另一种写法
'email' => Yii::t('common','Email'),
'password' => '密码',
'verifyCode' => '验证码',
];
}